繁体   English   中英

我怎样才能让乌龟画一个 web 螺旋?

[英]how can i get turtle to draw a web spiral?

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

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

请帮助:(

在循环内部你必须改变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:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM