赞
踩
标签:new bing、GPT-4
前天 Open AI 的 GPT-4上线了,所能达到的高度惊爆人的眼球。上线当天,我就把应用 GPT-4 的新版微软搜索引擎 bing 使用环境配置好了。今天试着用这个 bing 的聊天功能,一步步与 bing 沟通,真还让 bing 替我编写了一个令我满意的 Python 程序。而这个画阿基米德螺旋线的 Python 程序,我在几年前自己 Coding 竟然花了半个月,才达到满意的结果。新科技带来的变化,令人眼花缭乱、一时难以判断走向,是不是很惊恐?
下面就在这里展现、赏析这个聊天过程吧。
由于 bing Chat 还不支持完整截图,去网页打开吧。点击此处或者复制链接后在 new bing 中打开(需要在 new bing 中登录后才能打开,下同)。
为了美观,略有改动(step *= 0.99
改为step *= 0.999
),下同。
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 5 # 螺旋线的起始半径 b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度 step = 5 # 螺旋线的步长 # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
看上去从原点到螺旋线的起点的那条很短的直线即第一笔不是螺旋线的一部分,是多余的。
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 5 # 螺旋线的起始半径 b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度 step = 5 # 螺旋线的步长 # 抬起画笔,不留痕迹(新增代码) t.penup() # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 放下画笔,开始绘制(新增代码) t.pendown() # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
从运行结果看,第一笔前把笔抬起后,没有及时放下,导致后边的笔画全部没有画,需要改正。
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 5 # 螺旋线的起始半径 b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度 step = 5 # 螺旋线的步长 # 抬起画笔,不留痕迹(新增代码) t.penup() # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 放下画笔,开始绘制(新增代码) t.pendown() # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 5 # 螺旋线的起始半径 b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度 step = 5 # 螺旋线的步长 # 抬起画笔,不留痕迹(新增代码) t.penup() # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 # 放下画笔,开始绘制(新增代码) t.pendown() # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 5 # 螺旋线的起始半径 b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度 step = 5 # 螺旋线的步长 # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 if angle > 0: # 如果角度大于0,说明不是第一笔(新增代码) t.pendown() # 放下画笔,开始绘制(新增代码) else: # 否则,说明是第一笔(新增代码) t.penup() # 抬起画笔,不留痕迹(新增代码) # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
至此,必应终于把多余的第一笔去掉了。表扬一下。
为了 new bing 以后能正确画出,特意总结了一下,令人发笑的是 new bing 还找了理由推脱。
(略)
画笔箭头方向始终朝着右面,感觉怪怪的,让 bing 改一下。
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 10 # 螺旋线的起始半径(修改代码) b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度(修改代码) step = 5 # 螺旋线的步长 # 移动画笔到原点(0, 0)(新增代码) t.goto(0, 0) # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 if angle > 0: # 如果角度大于0,说明不是第一笔(新增代码) t.pendown() # 放下画笔,开始绘制(新增代码) else: # 否则,说明是第一笔(新增代码) t.penup() # 抬起画笔,不留痕迹(新增代码) # 设置画笔朝向与螺旋线方向一致(新增代码) t.setheading(angle) # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.99 # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
还是不正确,画笔箭头方向与螺旋线垂直了。
(略)
# 导入turtle模块,用于绘图 import turtle # 导入math模块,用于计算 import math # 创建一个turtle对象,命名为t t = turtle.Turtle() # 设置画笔的颜色和速度 t.color("blue") t.speed(0) # 设置阿基米德螺旋线的参数 a = 10 # 螺旋线的起始半径(修改代码) b = 0.1 # 螺旋线的增长系数 angle = 0 # 螺旋线的起始角度(修改代码) step = 5 # 螺旋线的步长 # 移动画笔到原点(0, 0)(新增代码) t.goto(0, 0) # 循环绘制阿基米德螺旋线,直到半径超过200像素或角度超过1080度 while a < 200 and angle < 1080: # 计算阿基米德螺旋线上当前点的极坐标(r, theta) r = a + b * angle # 半径等于起始半径加上增长系数乘以角度 theta = math.radians(angle) # 角度转换为弧度制 # 计算阿基米德螺旋线上当前点的直角坐标(x, y) x = r * math.cos(theta) # x坐标等于半径乘以余弦值 y = r * math.sin(theta) # y坐标等于半径乘以正弦值 if angle > 0: # 如果角度大于0,说明不是第一笔(新增代码) t.pendown() # 放下画笔,开始绘制(新增代码) else: # 否则,说明是第一笔(新增代码) t.penup() # 抬起画笔,不留痕迹(新增代码) # 设置画笔朝向与螺旋线方向一致(新增代码) t.setheading(angle + 90) # 移动画笔到当前点,并画出一小段曲线 t.goto(x, y) # 更新角度和步长,使得曲线更平滑 angle += step step *= 0.999 # 结束绘图,并保持窗口显示直到用户关闭 turtle.done()
通过与 new bing 沟通,让 bing 为我编写了一个令人满意的程序。从中可以得出以下启发:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。