首页 > 解决方案 > 我怎样才能让乌龟画一个螺旋网?

问题描述

我试图让我的乌龟画出一个螺旋状的蜘蛛网,但我只是不能让螺旋形螺旋形或循环,直到它碰到边缘。我尝试了几种不同的方法,但我无法解决。我对编码很陌生:)

from turtle import *
from math import sin, cos, pi
from random import randint
shape("circle")
turtlesize(0.3)
speed(5)
n=int(input("give number of main lines: "))
r=int(input("give length of main lines: "))
spiraldistance=r/10
angle=360/n
rad=(pi*angle)/180
for i in range(n):
    forward(r)
    backward(r)
    right(hoek)
x=cos(rad*0)*spiraldistance
y=sin(rad*0)*spiraldistance
goto(x,y)
integers = []
for j in range(0, r):
    p = 10/n
    integers.append(j)
    integers.append(p)
    x=cos(rad*j)*(spiraldistance+p)
    y=sin(rad*j)*(spiraldistance+p)
    goto(x,y)

input("Press enter to finish")

我需要它以这种方式螺旋查看屏幕截图

https://gyazo.com/028228823b7aab611db144436cf93868

https://gyazo.com/5c9ca19cfa34be5559bdbc3365f65f0d

请帮助:(

标签: python

解决方案


内部循环你必须改变p,但你总是使用相同的值

p = 10/n

如果您使用+=而不是=

p += 10/n

然后你可以得到螺旋


示例代码:

from turtle import *
from math import sin, cos, pi

shape("circle")
turtlesize(0.3)
speed(0)

#---

#n = int(input("give number of main lines: "))
n = 5
#r = int(input("give length of main lines: "))
r = 200

#---

angle = 360/n
for i in range(n):
    forward(r)
    backward(r)
    right(angle)

#---

spiraldistance = r/10
rad = (pi*angle)/180
p = 0

for j in range(r):
    x = cos(rad*j) * (spiraldistance+p)
    y = sin(rad*j) * (spiraldistance+p)
    goto(x, y)
    p += 10/n

exitonclick()   

结果n = 5

在此处输入图像描述

结果n = 15

在此处输入图像描述

编辑:要在有长度的行结束之前停止螺旋,r您必须spiraldistance+p与 r` 进行比较 - 即

if spiraldistance+p >= r:
    break

或者更好地使用while循环

spiraldistance = r/10
rad = (pi*angle)/180
p = 0
j = 0

while spiraldistance+p < r:
    x = cos(rad*j) * (spiraldistance+p)
    y = sin(rad*j) * (spiraldistance+p)
    goto(x, y)
    p += 10/n
    j += 1

编辑:我添加steps了选择每行螺旋“交叉”多少次。

from turtle import *
from math import sin, cos, pi

shape("circle")
turtlesize(0.3)
speed(0)

#--- settings ---

# number of main lines
#n = int(input("give number of main lines: "))
n = 15

# length of main lines
#r = int(input("give length of main lines: "))
length = 200

# number of steps on every main line
steps = 15

#--- main lines ---

angle = 360/n
for i in range(n):
    forward(length)
    backward(length)
    right(angle)

#--- spiral ---

p = (length/n)/steps
rad = (pi*angle)/180

spiraldistance = 0
j = 0

while spiraldistance < length:
    spiraldistance += p
    x = cos(j) * spiraldistance
    y = sin(j) * spiraldistance
    goto(x, y)
    j += rad

#--- keep open ---

#mainloop()
exitonclick()

步骤 5 和 15:

在此处输入图像描述


推荐阅读