python - 我怎样才能让乌龟画一个螺旋网?
问题描述
我试图让我的乌龟画出一个螺旋状的蜘蛛网,但我只是不能让螺旋形螺旋形或循环,直到它碰到边缘。我尝试了几种不同的方法,但我无法解决。我对编码很陌生:)
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:
推荐阅读
- python - 获取 ValueError:在尝试运行 Adjt 时发现样本数量不一致的输入变量:[248, 1239]。R 平方和 RMSE
- xml - 将订单发布到 Prestashop API 时出现 500 内部服务器错误
- php - 如何使用 PHP 从我自己的 Instagram 获取图像?
- c# - 在 LINQ 查询中动态访问嵌套在匿名类型中的属性
- c# - Xamarin iOS 中 Realm 的单元测试
- opc - 两个不同的 OPC 服务器可以共享同一个端口吗?
- javascript - 每100vh css滚动捕捉
- android - Android:创建监听器的首选方式,函数 vs 内部类 vs 对象
- javascript - 运行while循环时setTimeout不运行
- flutter - 如何将 TableRow 的其中一个孩子拉伸到最大可用高度?