使用turtle模块绘制西奥多罗斯螺旋时遇到困难
我在做编程作业时遇到一个问题,需要用turtle模块来画泰奥多罗斯螺旋,而且n要设为17。
我已经把代码写好了,但每次画出来的图形比例都很奇怪。比如说,第一个三角形的边长是sqrt(1)、1和sqrt(2),这个三角形应该是一个45度的等腰三角形,但在turtle里,1像素就等于1,所以这个三角形会小得看不清楚。我得用更大的数字,比如100,但如果我用100,第一个三角形的边长就变成了sqrt(100)、100和sqrt(200),这样就不再是同样比例的三角形了。
这是我的代码:
def TheodorusSpiral(myTurtle,n,d):
import math
myTurtle=turtle
myTurtle.pu()
myTurtle.home()
myTurtle.pd()
myTurtle.fd(d)
myTurtle.lt(90)
myTurtle.fd(d)
myTurtle.lt(45)
for i in range(n-1):
a = (i+2)*d
c = math.fabs(d*math.sqrt(a))
angle = math.degrees(math.atan(c/d))
angle2 = math.degrees(math.atan(d/d*math.sqrt(a+1)))
angle3 = math.degrees(math.atan(d*math.sqrt(a+1)/d))
angle4 = 180 - (angle2 + angle3)
angle5 = 180 -(angle + angle4)
myTurtle.fd(d)
myTurtle.lt(angle5)
TheodorusSpiral(1,4,50)
还有一个问题是,当我调用这个函数时,参数“myTurtle”不能用像“tim”这样的名字/字母来调用。
比如说,调用TheodorusSpiral(tim,4,50)时会出现错误:
“tim没有定义”
1 个回答
0
我建议你在计算角度的时候,假装你在画一个图,腿的长度设为1,就像维基百科上的图那样。所以在你的角度计算中根本不需要用到d
,可以这样做:
import turtle
def TheodorusSpiral(myTurtle,n,d):
import math
myTurtle=turtle
myTurtle.pu()
myTurtle.home()
myTurtle.pd()
myTurtle.fd(d)
myTurtle.lt(90)
myTurtle.fd(d)
myTurtle.lt(45)
for i in range(n-1):
a = (i+2)
c = math.fabs(math.sqrt(a))
angle = math.degrees(math.atan(c/1))
angle2 = math.degrees(math.atan(1/math.sqrt(a+1)))
angle3 = math.degrees(math.atan(math.sqrt(a+1)/1))
angle4 = 180 - (angle2 + angle3)
angle5 = 180 -(angle + angle4)
myTurtle.fd(d)
myTurtle.lt(angle5)
TheodorusSpiral(1,4,50)
除了对角度计算的修改(我基本上把d
从数学公式中完全去掉了,这样就能正常工作),我还在示例代码中加上了“import turtle”这一行,这样你就可以直接复制粘贴,代码就能正确运行。
至于你提到的另一个问题,就是你尝试调用TheodorusSpiral(tim,4,50)
时失败了——这里面有个关于Python变量的基本误解。你提到这是一个作业——我强烈建议你去问你的老师这个问题,因为你需要比我有时间解释的更详细的说明。(抱歉)。把你想做的事情告诉老师,请他/她解释一下为什么会失败。