别这样夸我。我会飘飘然的。明经上高人多的是。呵呵,这就是我为什么喜欢来这里的缘故。
你说的竖椭圆,实际上是椭圆的长轴旋转了90度。
(vl-load-com)
(prompt "\n选取两个椭圆,第一个椭圆必须正置放.")
(defun c:ccc (/ A1 B1 C1 CEN D1 D2 DIV E1 E2 EPS O1 O2 SOL MAJ)
(setq eps 1e-8)
(setq e1 (car (entsel)))
(setq e2 (car (entsel)))
(if (and e1
e1
(setq d1 (entget e1))
(setq d2 (entget e2))
(= (cdr (assoc 0 d1)) "ELLIPSE")
(= (cdr (assoc 0 d2)) "ELLIPSE")
)
(progn
(setq d1 (entget e1))
(setq d2 (entget e2))
(setq a1 (distance '(0 0 0) (cdr (assoc 11 d1))))
(setq b1 (* a1 (cdr (assoc 40 d1))))
(setq cen (cdr (assoc 10 d1)))
(setq maj (cdr (assoc 11 d1)))
(setq maj (mapcar '/ maj (list a1 a1 a1)))
(setq ang (angle '(0 0 0) maj))
(setq nor (cdr (assoc 210 d1)))
(setq o1 (vlax-ename->vla-object e1))
(setq o2 (vlax-ename->vla-object e2))
(if (or (equal (angle '(0 0) maj) (* pi 0.5) eps)
(equal (angle '(0 0) maj) (* pi 1.5) eps)
)
(setq c1 a1
a1 b1
b1 c1
)
)
(setq div 50)
(setq sol (find o2 a1 b1 cen div))
(foreach n sol
(bsol (car n) (cdr n) o2 a1 b1 cen eps mat)
)
)
)
(princ)
)
关于第一种方法,有几个错误,我已经做了修正。请重新下载附件
<p><font face="Verdana"></font></p>
<p><font face="Verdana">给出最后的程序。即使两个椭圆是旋转的,或者在UCS下,也能正确给出答案。</font></p>
<p><font face="Verdana">实际上本程序给出的思路也可求一般曲线的公切线。</font></p>
<p><font face="Verdana">没有严格出错处理,有需要的请自行加上.<br/></font></p> <font face="Verdana">highflybird大师您的程序真是很伟大,我试用了感谢无比的佩服。<br/>有个想法请您看看,如再略改一下,在目前可通用于两个椭圆的情况下,也改为可通用于两个圆或一个椭圆另一个为圆。这样是不是就应用起来很方便了。<br/>请您再试试看。</font>
[原创]两条曲线的公切线的求法
本帖最后由 作者 于 2010-9-10 14:45:06 编辑 <br /><br /> <p> </p><p></p>
<p>修改了一下,没来得及测试,应该可以用于椭圆和圆,</p>
<p> </p>
<p> </p>
<p>呵呵,测试一下如何在发帖中用明经的金钱规则。</p> 谢谢了,很厉害啊@ 还有数学几何的,好深奥啊? 高飞大师,我一直关注你的贴子,请多多发贴哦 本帖最后由 690994 于 2012-3-13 17:30 编辑
高飞大师确是高人,艺高德更高, 都是高手!!!
页:
1
[2]