如果不想用vl函数的话,可以这样: 1、先用entget取得椭圆的中心 -DXF码 10 椭圆长轴端点--相对于中心点 DXF码 11 椭圆的短长比 DXF码 40 由此推算出长轴a,短轴b,及其旋转角度。 并由此建立一个用户坐标系统,X轴为长轴方向,原点为中心。 则椭圆的方程可以表达为:X^2/a^2+Y^2/b^2=1. 2、得到线段的两个端点 DXF码 10,11 对这两点的坐标变换,用函数(trans pt 0 1) 即把这两个端点转化成用户坐标。 依此得出其直线方程: mX+nY+p=0,其中m,n,p的值应该不难算出。 (如果你去搜索一下的话,说不定有这方面的源程序) 3、解方程组:X^2/a^2+Y^2/b^2=1 ;mX+nY+p=0 得到判别式: delta 4、如果delta < 0 则肯定没有交点。 如果delta >= 0 则求出交点。 5、对交点进行判断: 如果交点在直线的延长线上,则此线段与椭圆不相交。否则相交,返回交点值。 诚然,这样做的确复杂了很多,但是,并不是复杂的方法就一定速度慢,我相信这个方法比用 vla-IntersectWith 肯定要快。而且,你自己在动手解这个题的时候,你会学到很多东西。 |