如何用C语言 求平面上两条线段直接的最小距离
这个题目之后。我没有分了,能给的全部给出。
如何用C语言 求平面上两条线段直接的最小距离。
给两个资料:
我找到一个算法逻辑(英文部分)。然后我又找到一个求空间中两线段最小距离的(最下面连接的那个)我自己想法是,空间的,然后我就想,3维的那个,只有把两条线段的z都置为0,那么两条线段就是处于同一平面,这样的话,我把值分别代入逻辑算法,和3维的那个,看看两个解出来的r,s结果是否相同,如果相同的话,说明
r = ((Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 1)
s = ((Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 2)
没有错,因为这个比较简单,所以我就直接可以拿来用了,但是算了2两遍,二者得出的结果不一样,所以我就没直接用
r = ((Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 1)
s = ((Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 2)
来作为求r s 来作为判断条件。
照理说不应该呀,应该相等才对,难道是我算错了吗?
AB and CD are line segments
Solving the above for r and s yields
r = ((Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 1)
s = ((Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay))/((Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx)) ------ (eqn 2)
Let Point be the position vector of the intersection point, then
Point=A+r(B-A) or
Px=Ax+r(Bx-Ax)
Py=Ay+r(By-Ay)
By examining the values of r & s, you can also determine some other
limiting conditions:
If 0<=r<=1 & 0<=s<=1, intersection exists
r<0 or r>1 or s<0 or s>1 line segments do not intersect
If the denominator in eqn 1 is zero, AB & CD are parallel
If the numerator in eqn 1 is also zero, AB & CD are collinear.
我还找到一个求空间中的两线段的最小距离的的:http://wenku.baidu.com/view/ea02ff8a6529647d2728520c.html