python canvas画弧度_Python带你找回童年的万花尺

还记得小时候的万花尺吧?这么画:

e41b08131b0a9502c204dbe3c4479317.gif

一点也不费脑筋,就可以出来这么多丰富多彩的复杂几何图形。

fcfa6d27a7a80a336de26b22072935d2.png
8dfa07de4f94a65645bd6ecd909fca7d.png

具体而言,可以用万花尺玩具(如图2-1所示)来绘制数学曲线。这种玩具由两个不同尺寸的塑料齿轮组成,一大一小。小的齿轮有几个孔。把钢笔或铅笔放入一个孔,然后在较大齿轮(内部有齿)内旋转里面的小齿轮,保持笔与外轮接触,可以画出无数复杂而奇妙的对称图案。

903d1dc30c7d148a716f1094c3713e1c.png

图2-1 万花尺

现在,在电脑里,用Python也可以这么玩了,让我们看看Python的万花尺效果吧。(不用急,程序在后哦)

$ python spiro.py

默认情况下,spiro.py程序绘制随机螺线,如图2-5所示。按S键保存绘制。

221585ef52fa32b6ab0673c5f8c20b14.png

图2-5 spiro.py的运行示例

再次运行程序,这次在命令行传入参数,画出特定的螺线。

$ python spiro.py --sparams 300 100 0.9

图2-6展示了输出结果。如你所见,这段代码根据用户指定的参数绘制了一条螺线,图2-5和它不同,展示了几个随机螺线的动画。

2ecd777568da605b2bb36133fa73f201.png

图2-6 用具体参数运行spiro.py的示例

这么神奇又好玩的万花尺,在Python里怎么玩呢?

不要走开,让我们继续下面的Python之旅。

在这个项目中,我们将用Python来创建动画,像万花尺一样绘制曲线。我们的spiro.py程序将用Python和参数方程来描述程序的万花尺齿轮的运动,并绘制曲线(我称之为螺线)。我们可以将完成的画图保存为PNG图像文件,并用命令行选项来指定参数或生成随机螺线。

在这个项目中,我们将学习如何在计算机上绘制螺线。还将学习以下几点:

  • 用turtle模块创建图形;
  • 使用参数方程;
  • 利用数学方程来生成曲线;
  • 用线段来画曲线;
  • 用定时器来生成图形动画;
  • 将图形保存为图像文件。

 参数方程

在本节中,你将看到用参数方程来画圆的简单例子。参数方程将曲线上点的坐标表示为一个变量的函数,该变量称为参数。参数方程让绘制曲线变得容易,因为只要将参数代入方程就能产生曲线。

注意

如果你现在不想学习这部分数学知识,可以跳到下一部分,讨论针对万花尺项目的方程。

我们开始考虑用半径 r 来描述一个圆的方程,圆心位于二维平面的原点。 x 、 y 坐标满足该方程的所有点构成了圆。

现在,请考虑下面的方程:

x = r cos( θ )

y = r sin( θ )

这些方程是圆的参数表示,其中角 θ 是参数。这些方程中(X,Y)的任何值,都满足前面描述的圆的方程,X 2 + Y 2 = R 2 。如果让 θ 从0变到2π,可以用这些方程来计算圆上对应的 x 和 y 坐标。图2-2展示了这种方案。

8f31cea8266926da656f1d72f5640ecf.png

图2-2 用参数方程描述圆

记住,这两个方程适用于圆心在坐标系原点的圆。将圆心转换到点( a , b ),就可以将圆置于 xy 平面的任何位置。所以更一般的参数方程就变成 x = a + r cos( θ )和 y = b + r cos( θ )。现在,让我们来看看描述螺线的方程。

万花尺方程

图2-3展示了类似万花尺运动的数学模型。该模型没有齿轮,因为玩具中的齿轮只是为了防止打滑,而在这里不必担心打滑。

7f6c750f35d2943503c81730d132a7be.png

图2-3 万花尺数学模型

在图2-3中,C是较小的圆的圆心,P是笔尖。较大的圆半径为 R ,较小的圆半径为 r 。半径之比表示如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值