python代码改写_将spirograph代码改写为函数

我正在写一个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。函数外部的循环正在生成模式:

e8b548e2884e4cf70e328e9012b902c1.png

用drawSpiral(2, [50, 50], [5, -3])调用的函数产生

3eb8b7751f1015f591a311a3dfb18a10.png

它似乎在伸展上半部分。当双臂的速度为5时,函数将产生两个圆,一个比另一个大。然而,它产生了一个倒置的心形,点连接到中心。

c81e08f89bad33dd73b199069286681d.png

现在有了更多的证据,比我更懂数学的人能帮我吗?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值