明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8400|回复: 29

[【高飞鸟】] CAD中的美与乐

  [复制链接]
发表于 2014-8-22 10:34:43 | 显示全部楼层 |阅读模式
本帖最后由 highflybird 于 2014-8-22 11:01 编辑

我是属于爱折腾的那一类人的。
CAD是我这个专业的必备工具。一天到晚都离不开它。
当然,有时候画图累了,就想开开小差。偶然的一次,我在用CAD的夹点拉伸的时候,竟然发现了一个很有意思的现象。
用过CAD的人基本都知道,一段弧有四个夹点 :弧的两个端点、弧段的中点、弧心。当我们把弧的中间的那个夹点拉到弧心的那个夹点位置后,弧心的那个夹点位置却跑走了,然后我又把弧中间的夹点拉到新的弧心处,当我这样重复下去,我开始以为整个弧会最后定在一个位置,但实际上没有,无论我这样做多少次,弧的位置永远也不会固定。
这个偶然的发现引起了我的注意。我觉得不是一个普通的问题,我感觉它是发散的。QJchen博士用Maple佐证了我的感觉–它的确是发散的!但是,发散的,并不意味这这些夹点的位置是毫无规律的。那么,我就开始折腾了:
首先,我用公式找出它们之间的关系,通过一番简单的数学推理,得到如下图的公式:

这个关系看起来比我想象的要简单多了,跟求开平方的公式仅仅相差一个正负号,如此的简洁而美妙的公式。当然这个公式是对于实数集的,我又展开联想了,如果把这个公式扩展到复数集呢,按照这样的迭代,是怎样的效果呢?
很好,那么稍加推理,对某个位置(Cx ,Cy)的迭代得到如下公式:
Xn+1= (xn-xn/(xn*xn+yn*yn))/2+Cx;
Yn+1= (yn+yn/(xn*xn+yn*yn))/2+Cy;
到此,我想到了曼德布罗特的分形集,说做就做,我利用我编写的一段程序,加入了一点代码,然后在CAD上运行,得到了如下的效果:


结果证明了,它果然具有分形的性质。像啥?有的说是蝴蝶,有的说是猴子的脸,究竟像什么,就凭你的想象了。
我把这个图形叫做高飞鸟集。因为我没在其他人中或者其他地方看到过类似的图片。这也算是我的一个发现吧。

是啊,CAD中竟然蕴藏了这么多的乐趣和美,是我以前从未领略过的。
美是无处不在的,只不过我们还未发觉。
附注:多年前我就想把写下来,直至今日才付诸实现。

2014年8月21日 Highflybird于深圳

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 6明经币 +9 金钱 +160 收起 理由
redcat + 1 好人品 厚积薄发
lucas_3333 + 1 很给力!
【KAIXIN】 + 1 + 50 很给力!
yjr111 + 1 + 50 丘比特神箭射过~~
qjchen + 2 + 30 赞一个!
Gu_xl + 3 + 30 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2020-1-3 14:20:45 | 显示全部楼层
highflybird大师才是真正的高高手!!!
发表于 2020-1-3 14:19:41 | 显示全部楼层
2006版本的确是有4个夹点的
发表于 2020-5-7 16:03:23 | 显示全部楼层
我只能说,你是牛人
 楼主| 发表于 2014-8-22 10:41:55 | 显示全部楼层
本帖最后由 highflybird 于 2014-8-22 15:05 编辑

程序的LISP代码:
  1. ;;;*********************************************
  2. ;;; 迭代公式(用户可以自行修改)               
  3. ;;; x,xx复数的实数部分,y,yy复数的虚数部分      
  4. ;;; xx = (x-x/(x*x+y*y))/2+cx                  
  5. ;;; yy = (y+y/(x*x+y*y))/2+cy                  
  6. ;;;*********************************************
  7. (defun fx (x y cx cy)
  8.   (if (and (zerop x) (zerop y))
  9.     cx
  10.     (+ (* 0.5 (- x (/ x (+ (* x x) (* y y))))) cx)
  11.   )
  12. )
  13. (defun fy (x y cx cy)
  14.   (if (and (zerop x) (zerop y))
  15.     cy
  16.     (+ (* 0.5 (+ y (/ y (+ (* x x) (* y y))))) cy)
  17.   )
  18. )

  19. ;;;*********************************************
  20. ;;; 逃逸判断:                                 
  21. ;;; 当两个复数相接近的时候停止迭代              
  22. ;;;*********************************************
  23. (defun Escape (x xx y yy tol)
  24.   (< (+ (* (- xx x) (- xx x)) (* (- yy y) (- yy y))) tol)
  25. )
  26.             
  27. ;;;*********************************************
  28. ;;; Highflybird分形的绘制主函数                 
  29. ;;; 参数: col0 初始颜色值                       
  30. ;;;       X1,X2,Y1,Y2,点的取值范围              
  31. ;;;       W,H  图像的宽和高                     
  32. ;;;       tol  逃逸半径                        
  33. ;;;       Itr  迭代最大次数                     
  34. ;;;       Grad 颜色梯度                        
  35. ;;;*********************************************
  36. (defun HFB_fractal (col0 X1 X2 Y1 Y2 W H tol Itr grad /
  37.         i j dx dy HSL0 cx cy x y n xx yy)
  38.   (setq HSL0 (apply 'RGB->HSL col0))
  39.   (setq dx (/ (- X2 X1 0.0) W))
  40.   (setq dy (/ (- Y2 Y1 0.0) H))
  41.   (setq i 0)            
  42.   (repeat W                                     ;图像的宽
  43.     (setq j 0)
  44.     (repeat H                                   ;图像的高
  45.       (setq cx (+ X1 (* i dx)))                 ;实数部分
  46.       (setq cy (+ Y1 (* j dy)))                 ;虚数部分
  47.       (setq x cx y cy)                          ;开始迭代位置
  48.       (setq n 0)                                ;迭代次数置零
  49.       (while (<= n Itr)                         ;开始迭代
  50.   (setq xx (fx x y cx cy))                ;得到新的实数部分
  51.   (setq yy (fy x y cx cy))                ;得到新的虚数部分
  52.   (if (Escape xx x yy y tol)              ;如果满足逃逸函数
  53.     (progn                                 
  54.       (PutColor HSL0 i j n grad)          ;着色这点
  55.       (setq n Itr)                        ;中断循环
  56.     )                                          
  57.     (setq x xx y yy)                      ;否则继续迭代
  58.   )
  59.   (setq n (1+ n))
  60.       )
  61.       (setq j (1+ j))
  62.     )
  63.     (setq i (1+ i))
  64.   )
  65. )

当然用LISP速度比较慢,最后我用了ARX编程,才满足了所见即所得的效果。
顺便推销一下我的博客地址:http://highflybird.mjtd.com/
欢迎大家有空转转哦!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-8-22 10:45:56 | 显示全部楼层
高飞鸟神一般的存在!飞在云端看不见啊
太高深,我等这一辈子都不法理解啊
发表于 2014-8-22 11:04:21 | 显示全部楼层
老实说没看明白
不是指后面那些涉及数学的内容
虽然那些确实也没去看

不知高飞鸟用的什么版本的CAD
我用的2004
弧的夹点只显示3个
两端点+弧中点
2010也只显示3夹点

假如还显示弧的圆心的话
那在拖动弧中点的时候
圆心应该是一直在变化的
怎么也没可能
让弧中点与圆心无限接近

前置条件没明白
后面也就没去看了
难道说
4夹点的系统里
拖动弧中点的过程中
圆心的那个夹点是“静止”的
弧中心接近圆心时才发生变化?

 楼主| 发表于 2014-8-22 11:35:15 | 显示全部楼层
本帖最后由 highflybird 于 2014-8-22 11:38 编辑
masterlong 发表于 2014-8-22 11:04
老实说没看明白
不是指后面那些涉及数学的内容
虽然那些确实也没去看

我没用过2004版本,但2006版本的确是有4个夹点的。
你选中的时候,出现4个蓝色的夹点。
在2006版本的时候,拖动中点的那个夹点,弧心的那个夹点位置不变,只有确定后才发生改变。
哈哈,幸好我用的是2006,不然的话,还发现不了这一规律。
发表于 2014-8-22 14:18:03 | 显示全部楼层
highflybird 是我们的偶像,真心想佩服!说胡话,前辈发内容我没有一个完全看懂的(其实最多只能看懂一点点),但是我真的很佩服前辈。一个小小的问题,您能会阐述出这么多的理论,佩服前辈这种“钻”的精神,是值得我们后辈学习!向highflybird致敬!!
发表于 2014-8-22 14:55:37 | 显示全部楼层
能看懂LZ的帖子就能成为大师了,尽管只看懂了一点点,也使我在黑暗中少摸索了N多年,真心感谢
发表于 2014-8-22 15:18:05 | 显示全部楼层
前排仰视大神,晚辈向高老师学习!

发表于 2014-8-22 23:35:03 | 显示全部楼层
不明白你那图片是怎么弄出来的

点评

大师不是发了源码吗?lisp速度慢只能生成类似的,分辨率不能太高,大师也说了是用的ARX才达到这种效果的  发表于 2014-8-23 08:15
发表于 2014-8-23 02:03:57 | 显示全部楼层
向highflybird大师学习,看来不仅是编程高手,而且是个数学天材,膜拜中,望尘莫及啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-14 01:51 , Processed in 0.174914 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表