highflybir
发表于 2007-8-20 11:00:00
<p></p><p>这个是我找到的演示,但这个不是CAD画出来的,我是想如果要在CAD这么画,其编程原理和思路该如何?</p><p>我觉得这个很难,绝对是一个挑战.</p>
ZZXXQQ
发表于 2007-8-20 14:38:00
<p>难度忒大!这是PRO/E画的吧?</p>
无痕
发表于 2007-8-20 15:07:00
还看不太明白,特别是点角点再点圆那一段
zml84
发表于 2007-8-20 15:44:00
1、楼主的动画,是在求解:四边形边长给定,那么四个角点都在同一个圆上时,这个圆的半径是多少?<br/>2、对于独立的问题,可以很好的解决。难就难在要找到这些问题的共性,写出通用过程来。<br/>重点在于"约束"。<br/>3、前面我发的动画,在激活运算时是用对象反应器触发的。不使用反应器,手动更新也是可以的。因为所有运算数据均扩展在对象之上。<br/>模拟代码在:http://www.acad.net.cn/viewthread.php?tid=348&page=1&extra=page%3D1<br/>
highflybir
发表于 2007-8-20 16:56:00
<p>我这个演示的图形是inventor做的,不过pro/e也可以达到.</p><p>如果把难度再降低一点,就是这个尺寸驱动的只有line和circle两种图形,不知道会不会好编一些? </p><p>因为这类问题的绝大部分是直线和圆。</p>
龙龙仔
发表于 2007-8-20 17:09:00
<p>还看不太明白,特别是点角点再点圆那一段</p><p>=>角點與圓重合</p><p>那是inventor畫草圖的動畫,用lisp寫這種驅動不太實際,我那頭像就是inventor做的!</p>
highflybir
发表于 2007-8-20 18:09:00
<p>这里有一篇文章提到了尺寸驱动的原理。但是很难看懂。</p><p>(在实际工作中有时候会出现一些求解的问题,用尺寸驱动可以实现)</p><p>既然可以用VB和+R14实现尺寸驱动,我想用Lisp一定也可以实现,关键是理解这个原理。</p>
zml84
发表于 2007-8-20 18:52:00
(defun JS (LST / ANG LST OLD R RI TMP)
;;初始化半径
(setq R(* 0.25 (apply '+ LST))
RI (* 0.1 R)
)
(setq TMP pi
OLD 0
)
(while (> (abs TMP) 1e-8)
;;计算圆心角和之半
(setq ANG 0)
(foreach N LST
(setq N (* 0.5 N)
ANG (+ ANG
(atan
N
(sqrt (- (* R R) (* N N)))
)
)
)
)
(setq TMP (- ANG pi))
(if (< (* OLD TMP) 0)
(setq RI (* 0.5 RI))
)
(if (< TMP 0)
(setq R (- R RI))
(setq R (+ R RI))
)
(setq OLD TMP)
)
R
)
;;;=============================
;;;测试
(setq R (JS '(120 70 130 100)))
(princ "\n半径为: ")
(princ (rtos R 2 6))
(princ)
zml84
发表于 2007-8-20 22:22:00
本帖最后由 作者 于 2007-8-20 22:27:42 编辑 <br /><br /> <p>这个问题的实质是几何变量的约束问题,通过逐步增加约束,使问题逐步得到解决。</p><p><br/>下面这个演示是用相邻直线间起终点坐标进行相互关联的示意:<br/></p>
highflybir
发表于 2007-8-21 12:00:00
zml84发表于2007-8-20 18:52:00static/image/common/back.gif(defun JS (LST / ANG LST OLD R RI TMP) ;;初始化半径 (setq R (* 0.25 (apply '+ LST)) RI (* 0.1 R) ) &nb
<p>ZML的方法很好,尽管只适用这一个题目,但方法可以稍加改变就能解决其他相似问题。</p>