我正在写一个python spiragraph程序,我需要一些帮助来将它的一部分转换成一个函数。代码试图重现我发现的视频here中所示的结果。一条线绕原点旋转,然后另一条线绕原点旋转,等等
在对三角函数(我认为是)做了一点研究之后,我把一个函数rotate(point, angle, center=(0, 0))组合起来。用户输入要旋转的点、要旋转的角度(顺时针)以及要旋转的中心点。在
然后,我实现了一个初始测试,其中一条线绕另一条线旋转。第二行的结尾画得好像拿着一支笔。代码有点乱,但看起来像这样。在x, y = 0, 0
lines = []
while 1:
point1 = rotate((0,50), x)
point2 = map(sum,zip(rotate((0, 50), y), point1))
if x == 0:
oldpoint2 = point2
else:
canvas.create_line(oldpoint2[0], oldpoint2[1], point2[0], point2[1])
lines.append( canvas.create_line(0, 0, point1[0], point1[1]) )
lines.append( canvas.create_line(point1[0], point1[1], point2[0], point2[1]) )
oldpoint2 = point2
tk.update()
x += 5
if x > 360 and y > 360:
x -= 360
canvas.delete("all")
time.sleep(1)
y += 8.8
if y > 360: y -= 360
for line in lines:
canvas.delete(line)
lines = []
太好了,效果很好。不过,我的最终目标是视频中的内容。在视频中,用户可以输入任意数量的手臂,然后定义每个手臂的长度和角速度。我的只有两只胳膊。最后,我的问题是如何将我发布的代码放入一个看起来像drawSpiral(arms, lenlist, velocitylist)的函数中。它将以臂数、每根臂的速度列表和每根臂的长度列表作为参数。在
我所做的一切
我已经试过好几次了。一开始,我有些东西根本不管用。我有一些很酷的形状,但绝对不是期望的输出。我工作了几个小时,最接近我的是:
^{pr2}$
我觉得这与我的解决方案相当接近,但还不完全正确。调用drawSpiral(2, [50, 75], [1, 5])看起来可能会产生一些正确的点,但不会连接正确的集合。盯着它看了大约一个小时,尝试了一些东西,我没有取得任何进展。我在看自己的代码时也很困惑。我卡住了!绕着屏幕的中心旋转的是一个绕着屏幕旋转的点。连接在中心的线在前后伸展。有人能给我指出正确的方向吗?在
进一步试验的结果
我已经设置了两个函数来绘制每个手臂末端的点,并发现了一些有趣的结果。在这两种情况下,第一只手臂的旋转速度为5,第二只手臂的旋转速度为-3。函数外部的循环正在生成模式:
用drawSpiral(2, [50, 50], [5, -3])调用的函数产生
它似乎在伸展上半部分。当双臂的速度为5时,函数将产生两个圆,一个比另一个大。然而,它产生了一个倒置的心形,点连接到中心。
现在有了更多的证据,比我更懂数学的人能帮我吗?在