[求助]LISP能求出双椭圆公切线端点吗?
<p><font face="Verdana">LISP能求出双椭圆公切线端点吗</font>?</p><p>好象在双圆中可计算出公切线端点位置来,可椭圆就无法算了,找了许多椭圆切线公式来,可都套用不上啊。</p>
<p>请教明经上的高手朋友,不知道用数学公式还是用LISP函数,能不能求出双椭圆公切线的端点。</p>
<p>谢谢高手的指点。</p>
<p> </p> <p>椭圆的公切线,如果两个椭圆共轴线,是有几何解的,我记得好想在计算几何板块中讨论过,你不防去搜搜,如果不共轴,是要解一个四次方程的。</p>
<p>参考以下的帖子,但是他们没完全解决。</p>
<p><font face="Verdana">http://bbs.pep.com.cn/thread-442688-1-3.html</font></p>
<p><font face="Verdana"><a href="http://bbs.cnool.net/topic_show.jsp?id=8370006&oldpage=3&thesisid=494&flag=topic1">http://bbs.cnool.net/topic_show.jsp?id=8370006&oldpage=3&thesisid=494&flag=topic1</a></font></p> <p>不过楼主不要求太精确的话,可以用我的程序求两个椭圆的凸包,然后就能得到两条外公切线了</p>
<p>提供一个思路:</p>
<p>两个椭圆的通过不等比例缩放,总能把一个椭圆变换成圆,</p>
<p>然后,对其中一个用二分法搜索椭圆上的点,从这点出发引出椭圆的切线,如果另个椭圆(已经变换成圆)的圆心到这条切线的距离为半径的话,就说明相切了。</p>
<p>因此可以编程就得比较精确的解</p>
<p> </p> <p>如果是手工画的话,那是可以完成的。</p>
<p> </p>
<p>朋友介绍的我认真看了,所发内容图片都不符合我的想法,是两个椭圆同轴,这不是我想要的情况,我想要任意偏移的。</p>
<p> </p>
<p>而且是要用程序找到切线两端点位置的。可能这样的要求有点高了吧。</p>
<p> </p>
<p> </p> 这些天过去了,一直没想出好办法,一闷啊。 <p>在cad这样画图,用XL画椭圆的公切线。</p>
<p><font face="Verdana">命令: xl XLINE 指定点或 [水平(H)/垂直(V)/角度(A)/二等分(B)/偏移(O)]: tan 到 <---第一个椭圆<br/>指定通过点: tan 到 <---第二个椭圆<br/>指定通过点:</font></p>
<p> </p>
<p>这样可以求出椭圆的公切线,这个方法也适应其他的曲线,譬如spline.</p>
<p> </p>
<p>如果楼主真的一定要完全智能话的,只能这样:</p>
<p>(为了计算简单起见,设置第一个椭圆的的中心为原点,长轴为X轴)</p>
<p> </p>
<p>对第二个椭圆,设置参数x 为变量,这个变量的范围是0~2*pi,</p>
<p>在这个范围内,用(vlax-curve-getfirstderiv obj x )得到一个矢量(x2 y2 z2) (y2 /x2 其实就是斜率 )</p>
<p>那么就得到了经过这点的切线方程, </p>
<p> </p>
<p>对与第一个椭圆来说,椭圆的切线方程为 x1*x/a^2 + y1*y /b^2 =1;</p>
<p>因此可得到联立方程 方程一: (x1 /a^2 ) / x2 = +( y1 /b^2) y2; (或者) (x1 /a^2 ) / x2 = -( y1 /b^2) y2;</p>
<p> 方程二: x1^2/a^2+ y1^2/b^2 = 0;</p>
<p>由此得到x1,y1的解,那么 , 两个平行线的经过的点知道了,它们之间的距离就可以得到</p>
<p>不妨考虑距离也有正负(依据在 x2 y2的切线来判断)</p>
<p>所以对于变量x 来说距离就有不同形成 函数关系那么就可以利用二分法来求解了</p>
<p> </p>
<p> </p>
<p> </p> 本帖最后由 作者 于 2010-9-2 8:32:44 编辑 <br /><br /> <p> </p>
<p> </p>
<p>楼主不防测试一下上面的那个程序。</p>
<p>对大部分椭圆有效。</p>
<p>另外,我想模拟 XL的画公切线的方法,但是没成功,不知道问题出在哪儿。可能XL的方式只能CAD交互?不能用编程来实现吗?</p> <p><font color="#61b713" face="Verdana"><b>highflybird</b></font></p>
<p><strong><font color="#61b713"></font></strong> </p>
<p>真正的明经大侠,你的每一次发言,都是智慧的结晶。</p> <p><font face="Verdana">贴一个更简单的,可能这个更容易实现</font></p>
<p></p>
<p> </p>
<p>对于一般的曲线的公切线的求法,估计也可以按照如下的求法.</p>
<p>思路如下:以曲线的参数x为变量,求出此点的firstderiv,然后根据这点画一条线段,跟另一条曲线相交。如果交点距离>0,则说明与曲线相交,求出两个交点的距离y,如果没有交点,则设距离为负数y<0,这样得到了一个函数关系y = f(x),用二分法解这个方程即可。</p> <p>要是第一个也能竖着放,那感情真的是太酷了。</p>
<p> </p>
<p><font color="#61b713" face="Verdana"><b>highflybird </b></font></p>
<p><strong><font color="#61b713"></font></strong> </p>
<p>数学大师+CAD大师+LISP大师的化身</p>
<p> </p>
<p>明经上的</p>
页:
[1]
2