瑰丽多姿的万花规曲线原理

>>> 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 (恭候!)
    小弟通过此程序感觉到:数学分析得到的结果常常形式简单,但
实际效果却是相当让人激动的!此例只为抛砖引玉,请各位大虾赐教!

万花规曲线原理图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值