正文

关于求异面线段间的最短距离2009-09-21 10:11:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/47907.html

分享到:

我们知道,异面直线的最短距离指的就是公垂线的长度,计算方法很多,还可以计算出最短距离点对。

 

但在有的应用中,需要求出异面线段的最短距离。区别在于,异面线段的最短距离不一定就是公垂线的距离。换句话说,异面线段的最短距离点对必须都落在每条线段里面,而不能在线段的延长线上。

 

那么假设,现在异面线段的最短距离点对没有落在每条线段里面,很显然,公垂线距离就不是最短距离了。该如何求解最短距离呢?实际上,只要我们求出线段的每个端点到另一条线段的最短距离,然后进行比较,最小者即胜出当选。

 

下面我们来从几何上证明这一点。

第一幅图中,PQ是线段ABCD的公垂线。由于PQ分别位于ABCD线段内,因此PQ就是最短距离。由此我们也可以看出公垂线的一般做法。平移AB与CD相交得Q,从Q向P做垂线,得P

 

再来看第二幅图。显然PQ不再是线段ABCD的最短距离了,因为Q不在CD内。从几何上就可以看出,实际上AB上任一点UCD上任一点V的距离UV都可以这样求得:设UCDA’B’构成的二维平面内的投影为U’,那么UU’,U’VUV就构成了一个直角三角形。

 

ED的距离就是这样通过EE’E’D求得的。由于EE’ (或者UU’)都是相等的,因此最短距离的问题转变为求最小U’VE’D)的问题。即转化到二维平面上CDA’B’的最短距离。这就比较简单了。如果CDA’B’相交,那么最短距离为0CDAB的最短距离就是PQ;如果不相交,分别求出端点A’,B’CD的最短距离和端点C,DA’B’的最短距离,然后进行比较。当然实际求解中不用那么复杂,从图中可以看出,我们直接求解端点A,BCD的最短距离和端点C,DAB的最短距离即可。

 

 

        

 

因此结论就是:

(1)       如果两条线段异面或相交,那么首先判断公垂线的最小距离点对是否分别在两条线段上。如果在,那么公垂线距离为最短距离,直接返回该值。

(2)       如果最小距离点对不在其上,或者两条线段平行,那么直接把每条线段端点到另一条线段的最短距离进行比较即可。

 

 

 该算法相当有用,因为它被使用在一种很经典的算法中,那就是求解三维空间中线段到多边形的最短距离。该问题源自于碰撞检测中三角形面与胶囊体的碰撞。胶囊体上的点到其轴线段的最短距离都是R。因此我们可以求出轴线段到检测三角形的最短距离,如果其小于R,那么说明三角形上肯定有点在胶囊体内部,也就是碰撞发生了。另外,在三维GIS的点选线段操作中也可以使用并借鉴。

 

 

相关文章可以参考:

“空间中一个点到空间中一条线段的最短距离”;
http://www.mathchina.com/cgi-bin/topic.cgi?forum=5&topic=3547&show=25


“空间中两条线段之间的最短距离”

http://www.mathchina.com/cgi-bin/topic.cgi?forum=5&topic=3553&show=25
!

“空间中一个点到空间中一个三角形的最短距离”

http://www.mathchina.com/cgi-bin/topic.cgi?forum=5&topic=3564&show=0


[求助]如何求空间两个多面体的最短距离”
http://www.mathchina.com/cgi-bin/topic.cgi?forum=5&topic=3511&show=50


阅读(6028) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册