>>> 20181205 修正算法, 20190421更正博文,添加维基百科部分:
A. thita 改为 theta
B. 原来算法 alpha与theta的关系错了, alpha-theta 应为 theta-alpha
额外请参考:
Hypocycloid
https://en.wikipedia.org/wiki/Hypocycloid
In geometry, a hypocycloid is a special plane curve generated by the trace of a fixed point on a small circle that rolls within a larger circle.
It is comparable to the cycloid but instead of the circle rolling along a line, it rolls within a circle.
已验证
R=3r, S=r时 画出来的是个三角? (Ref: Deltoid2.gif) YES!
R=5, r=3, S=5 或 R=5, r=3, S=7 (Ref: https://en.wikipedia.org/wiki/Hypotrochoid 画的点离小圆心的距离大于小圆半径) 外五角星 YES!
R=2r 时 图形为一个椭圆 (Ref: https://en.wikipedia.org/wiki/Hypotrochoid ) YES
<<<
(这是1999年我发表在《电脑爱好者》第12期的拙作原文+配图
最新版本的万花规曲线是屏幕保护版v2.51
效果图及超小安装包见:http://blog.csdn.net/Tycool/archive/2006/06/16/804031.aspx
)
你肯定见到过这样一种玩具:把圆珠笔尖插到一块圆形塑料
板的孔内,顺(或逆)时针地用力让这块圆板沿着外面大圆框的
边缘转动,下面的纸上就会画出一种美丽的花纹,越画越多,越
画越神奇……只要让笔尖在小圆板上换个孔,又能画出另外千奇
百怪的花纹了!
能不能让电脑来模拟这种画法呢?当然可以!让我们来动动
脑筋,左三圈,右三圈……哟,别转晕了!小弟我为了这个算法
画了好多张纸的草图,总算得到了满意的结果。电脑这位方脑壳
朋友回又多学了一招,好象挺能干的,其实哪有我们人的脑袋瓜
灵活好使啊!
先看示意图:
!!!!!!!!!!!!!这里插入示意图 <万花规示意图.jpg>!!!!!!!
图〈1〉中,O为大圆圆心,C为小圆圆心,B为小圆上的孔,设R与
r分别为大小圆的半径,S为小圆上孔B离小圆圆心C的距离,由图
〈1〉开始,小圆逆时针自转(注意大小圆弧线相啮合)转至图〈2〉
位置时,设两圆心连线与水平相比转过了alpha弧度,小圆新旧切
点分别与圆心C连成的直径已转过theta弧度,因此:
r*theta=alph*R (大小圆的弧相啮合)
即theta=(R/r)*alpha;
若把两圆相切的部分看成沿大圆弧作匀速圆周运动,角速度
常量W,时间t作为变量,则 alpha=W*t,theta=(R/r)*W*t;
若设W为1度/秒,则
alpha = t
theta = (R/r) * t
theta-alpha= (R/r-1) *t 已删除: alpha - theta = t * (1-R/r)
B点新的坐标为:
CE=(R-r)*cos(alpha)
BD=S*cos(theta-alpha)
|Xb|=CE+BD=(R-r)*cos(alpha)+S*cos(theta-alpha)
=(R-r)*cos(t)+S*cos((R/r-1) *t)
EO=(R-r)*sin(alpha)
CD=S*sin(theta-alpha)
|Yb|=EO-CD= (R-r)*sin(alpha)-S*sin(theta-alpha)
=(R-r)*sin(t)-S*sin( (R/r-1) *t)
>>>以下为原文, 算法有错误:
|Xb|=CE+BD=(R-r)*cos(alpha)+S*cos(alpha-thita)
=(R-r)*cos(t)+S*cos(t*(1-R/r))
|Yb|=EO-CD=(R-r)*sin(alpha)-S*sin(alpha-thita)
=(R-r)*sin(t)-S*sin(t*(1-R/r))
输入后面的源程序,你就能看到令人激动的美妙曲线了!
如果改动小圆的半径r和着笔点B距小圆圆心的距离S,新的曲线
就形成了。不过,此程序有些待改进的地方:对于不同的小圆半径和
B点的位置组合,各曲线开始循环画原先画过的点的时间(EndTime)不
同,源程序中有几对我试过的组合,能得到相当满意的图案。哪位看
官如能由r和S得到与EndTime的关系,在下恳请赐愚赏析!小弟Email
地址:mr_cq#sohu.com (恭候!)
小弟通过此程序感觉到:数学分析得到的结果常常形式简单,但
实际效果却是相当让人激动的!此例只为抛砖引玉,请各位大虾赐教!