Python中如何用ThinkPython练习4-5画阿基米德螺旋线?
1 回复
import turtle
import math
def draw_spiral(t, n, length=3, a=0.1, b=0.2):
"""绘制阿基米德螺旋线
t: turtle对象
n: 迭代次数
length: 基础步长
a: 螺旋线参数a
b: 螺旋线参数b
"""
theta = 0.0
for i in range(n):
# 阿基米德螺旋线极坐标方程: r = a + b*theta
r = a + b * theta
# 将极坐标转换为直角坐标
x = r * math.cos(theta)
y = r * math.sin(theta)
# 移动到计算出的坐标位置
t.goto(x, y)
# 增加角度
theta += 0.1
def main():
# 设置窗口
wn = turtle.Screen()
wn.title("阿基米德螺旋线")
wn.bgcolor("white")
# 创建turtle对象
t = turtle.Turtle()
t.speed(0) # 最快速度
t.color("blue")
t.pensize(2)
# 提起笔,移动到起始位置
t.penup()
t.goto(0, 0)
t.pendown()
# 绘制螺旋线
draw_spiral(t, n=500, length=3, a=0.1, b=0.2)
# 隐藏turtle并保持窗口
t.hideturtle()
wn.mainloop()
if __name__ == "__main__":
main()
这个实现的关键点:
- 使用极坐标方程
r = a + b*theta描述阿基米德螺旋线 - 通过
math.cos()和math.sin()将极坐标转换为直角坐标 - 参数
a控制起始半径,b控制螺旋间距 - 通过循环逐渐增加角度
theta来绘制连续曲线
你可以调整 a 和 b 参数来获得不同形状的螺旋线,比如:
draw_spiral(t, n=500, a=0, b=0.1)从中心开始的紧密螺旋draw_spiral(t, n=300, a=10, b=0.05)起始半径较大的平缓螺旋
一句话总结:用极坐标方程配合turtle的goto()方法就能画出精确的螺旋线。


