“ 我思故我在。” ——卡笛尔
0 动机
在这篇文章里,将给大家介绍一下心形线及其画法,关于具体coding(编码)的东西以后再讲。关于心形线有一个浪漫的爱情故事,我们先讲完故事,再讲如何画心形线。
1 故事
《数学的故事》里面说到了数学家笛卡尔的爱情故事。笛卡尔于1596年出生在法国,欧洲大陆爆发黑死病时他流浪到瑞典。1649年,斯德哥尔摩的街头,52岁的笛卡尔邂逅了18岁的瑞典公主克里斯汀。几天后,他意外的接到通知,国王聘请他做小公主的数学老师。跟随前来通知的侍卫一起来到皇宫,他见到了在街头偶遇的女孩子。从此,他当上了小公主的数学老师。
小公主的数学在笛卡尔的悉心指导下突飞猛进,笛卡尔向她介绍了自己研究的新领域:直角坐标系。每天形影不离的相处使他们彼此产生爱慕之心,公主的父亲国王知道了后勃然大怒,下令将笛卡尔处死,小公主克里斯汀苦苦哀求后,国王将其流放回法国,克里斯汀公主也被父亲软禁起来。
笛卡尔回法国后不久便染上重病,他日日给公主写信,因被国王拦截,克里斯汀一直没收到笛卡尔的信。笛卡尔在给克里斯汀寄出第十三封信后就气绝身亡了,这第十三封信内容只有短短的一个公式:r=a(1-sinθ)。国王看不懂,觉得他们俩之间并不是总是说情话的,将全城的数学家召集到皇宫,但没有一个人能解开,他不忍心看着心爱的女儿整日闷闷不乐,就把这封信交给一直闷闷不乐的克里斯汀。
公主看到后,立即明了恋人的意图,她马上着手把方程的图形画出来,看到图形,她开心极了,她知道恋人仍然爱着她,原来方程的图形是一颗心的形状。这也就是著名的“心形线”。
国王死后,克里斯汀登基,立即派人在欧洲四处寻找心上人,无奈斯人已故,先她一步走了,徒留她孤零零在人间...…据说这封享誉世界的另类情书还保存在欧洲笛卡尔的纪念馆里。
【注:本故事摘抄自[1]】
2 真相
在历史上,笛卡尔和克里斯蒂娜的确有过交情。但笛卡尔是1649年10月4日应克里斯蒂娜邀请才来到瑞典,而当时克里斯蒂娜已成为了瑞典女王。笛卡尔与克里斯蒂娜谈论的主要是哲学问题而不是数学。有资料记载,由于克里斯蒂娜女王时间安排很紧,笛卡尔只能在早晨五点与她探讨哲学。笛卡尔真正的死因是因天气寒冷加上过度操劳患上的肺炎,而不是黑死病。 [1]
3 画心
现在我们讲如何画心形线,心形线是一个圆上的固定一点,在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹。我写了一个画轨迹线的通用工具,基于HTML5的,脚本语言是用的JavaScript(正是我们前面哪个系列所讲的)。那么,我们看一下吧。^_^
首先看怎么画心形线:
其实,它是两个圆周的相对运动,我们将圆周显示出来:
那么,能同时画多个心形线吗?我们将各个圆的速度和半径调节到合适的位置,并设置好初始位置,看一下同时画两个的情况:
同时画三个:
继续增加,同时画4个:
还能增加吗?看下图:
您可以继续增加下去,只要您设置好主圆(相对其半径的端点运动的圆)和子圆(以主圆半径为圆心的圆)的速度和半径的比例,以及子圆的初始位置。
4 尺子
其实,上述程序类似于万花尺的画图工具,不知道您有没有用过玩花尺,万花尺流行于上个世纪末的80-90年代,在不同地区和时段也有不同的俗名和别称:百变尺、画花行家、齿轮尺、圈圈尺等。
万花尺由母尺和子尺两部分组成。常见的母尺是内环形齿轮,子尺是带多孔的外环形齿轮。作画时,将子尺内置于母尺内环之中,轮牙镶嵌,笔头插在子尺的小孔中,用笔带动子尺顺着母尺的内沿齿轮反复作圆周运动。在作画过程中,两者内外齿要始终靠合。完成后纸上便会留下一个不可思议的美丽花朵。子尺上小孔的极小位移会引起图案类型的极大变化。子尺形状的变化有很多,除了圆形,还有椭圆形,弧边的三角形、十字形、梅花形、方形、多边形等等。母尺的变化不大,但有些母尺的外沿也带齿轮,把子尺置于母尺外沿作环绕运动,这时画出的是花形圈。母尺的内环通常是圆形和椭圆形。[2]
使用上述程序,您可以模拟万花尺画出五彩缤纷、绚丽多彩的图形,您还可以随意调整各个尺子的旋转速度、位置、半径以及运动,您甚至可以调整旋转加速度、控制半径在绘图过程的变化以及母尺的运动。
下面,现在我们将画出来的圆,串联起来,看有什么效果吧。^_^
首先,我们把“你的心,我的心,串一串”,再让串联起来的圆跟随我们的鼠标运动。看一下效果:@_@
然后,我们将心和心之间添加一些弹性,看一下效果:wow!
好了,或许您可以将这些有趣的心发送给您的朋友,您的朋友只需要双击,就可以观看效果了。哈哈,说了这么多,想不想玩一把?关注本公众号,回复“心形线”,就可以得到以上所有程序的代码,您可以在电脑上直接运行该代码!Ok,以上。
[1]https://baike.baidu.com/item/%E5%BF%83%E5%BD%A2%E7%BA%BF/10018818?fr=aladdin
[2]https://baike.baidu.com/item/%E4%B8%87%E8%8A%B1%E5%B0%BA/5114750?fr=aladdin