相关文章推荐
酷酷的羊肉串  ·  npm安装 (high ...·  1 年前    · 
傻傻的小蝌蚪  ·  8. Spring Expression ...·  1 年前    · 

在上面的代码中,使用了tracer和update命令来提高绘图速度。如果我们愿意,我们可以删除它们。

教你学画画02---如何用 Python Turtle 绘制画螺旋线_函数调用_02
乌龟向前移动一步,然后右转1度。当循环完成时,乌龟已经旋转了360度,所以完成了一个完整的旋转,我们得到了一个圆

增大半径和转弯速率

如果Turtle在每次迭代中移动更多,而不是以固定的距离移动会发生什么

for i in range(360):
 t.forward(i)
 t.right(1)

i替换 one作为参数forward

我们会得到一些快速移过屏幕的东西。看看我们能不能让它转得更快

for i in range(360):
 t.forward(i)
 t.right(20)

20替换1为参数right
教你学画画02---如何用 Python Turtle 绘制画螺旋线_mysql_04
这是我们的螺旋。但请注意曲线并不平滑

使曲线更平滑

让我们看看如何使螺旋曲线更平滑。但首先尝试以下代码

# Quadrant 1
t1 = t.Turtle()
t1.penup()
t1.goto(125, 125)
t1.pendown()
t1.circle(100)
# Quadrant 2
t2 = t.Turtle()
t2.penup()
t2.goto(-125, 125)
t2.pendown()
t2.circle(100, 270)
# Quadrant 3
t2 = t.Turtle()
t2.penup()
t2.goto(-125, -125)
t2.pendown()
t2.circle(100, 180)
# Quadrant 4
t3 = t.Turtle()
t3.penup()
t3.goto(125, -125)
t3.pendown()
t3.circle(100, 90)

代码在 4 个象限中打印 4 个圆形部分
教你学画画02---如何用 Python Turtle 绘制画螺旋线_mysql_05
我们可以使用turtle的circle函数来绘制圆的一部分。我们可以使用此功能使我们的Turtle沿着螺旋线以更平滑的方式移动

import turtle as t
t.tracer(10,1)
for i in range(360):
 t.circle(i,20)
t.update()

forward和right函数调用被替换为circle

circle上面的函数使Turtle向前移动,但也旋转一定的角度。这是我们得到的
教你学画画02---如何用 Python Turtle 绘制画螺旋线_迭代_06
我们现在有一个平滑的螺旋!

添加更多武器

但是如果我们想要一些看起来有点不同的东西——比如螺旋星系或银河系呢?我们首先需要添加更多的武器。

为此,我们将创建多个Turtle

import turtle as t
t.tracer(10,1)
t1=t.Turtle()
t2=t.Turtle()
t1.setheading(0) # Looks to the right
t2.setheading(180) # Looks to the right
for x in range(360):
 radius = x
 angle = 1
 t1.circle(radius,angle)
 t2.circle(radius,angle)
t.update()

在上面的代码中,t1和t2是最初使用setheading命令分别设置为向右和向左看的两只Turtle
教你学画画02---如何用 Python Turtle 绘制画螺旋线_迭代_07
两只乌龟现在都开始朝着自己的方向发展。现在让我们看看如何使其更具可配置性

import turtle as t
t.tracer(10,1)
N = 10
angle = 1
turtles = []
for position in range(N):
  look_at = 360/N*position
  new = t.Turtle()
  new.setheading(look_at)
  turtles.append(new)
for radius in range(360):
  for my in turtles:
    my.circle(radius, angle)
t.update()

我们只是更改了代码,这样可以通过更改创建任意数量的Turtle N,并且它们都以对称的方式看向不同的方向。

教你学画画02---如何用 Python Turtle 绘制画螺旋线_mysql_08
有趣的是,旋臂似乎相交。我们可以通过进行一些调整来防止这种情况发生

import turtle as t
t.tracer(10,1)
N = 10
angle = 30
turtles = []
for position in range(N):
  look_at = 360/N*position
  new = t.Turtle()
  new.setheading(look_at)
  turtles.append(new)
for radius in range(360):
  for my in turtles:
    my.circle(radius*radius, angle)
t.update()

我们设置angle为30并平方radius
通过使每次迭代的转弯角度更大并增加螺旋增加的速率(通过平方半径 - radius*radius),我们可以防止螺旋相交。(请注意,这是我无意中发现的)
教你学画画02---如何用 Python Turtle 绘制画螺旋线_迭代_09
耶!