有限行之间的最近距离
问题描述:
我有这个函数计算两条无限行之间的最近距离。有限行之间的最近距离
public static double GetClosestDistanceBetweenLines(Vector3 line1Point, Vector3 line1Vector, Vector3 line2Point, Vector3 line2Vector)
{
var u = line1Vector;
var v = line2Vector;
var w = line1Point- line2Point;
var a = Vector3.Dot(u, u); // always >= 0
var b = Vector3.Dot(u, v);
var c = Vector3.Dot(v, v); // always >= 0
var d = Vector3.Dot(u, w);
var e = Vector3.Dot(v, w);
var D = a * c - b * b; // always >= 0
double sc, tc;
// compute the line parameters of the two closest points
if (D < Epsilon)
{ // the lines are almost parallel
sc = 0.0;
tc = (b > c ? d/b : e/c); // use the largest denominator
}
else
{
sc = (b * e - c * d)/D;
tc = (a * e - b * d)/D;
}
// get the difference of the two closest points
var dP = w + (sc * u) - (tc * v); // = L1(sc) - L2(tc)
return dP.Length; // return the closest distance
}
但是,我想计算两条有限行之间的距离。
public static double GetClosestDistanceBetweenLines(Vector3 line1Point1, Vector3 line1Point2, Vector3 line2Point1, Vector3 line2Point2)
我该怎么做?
答
您有两个参数sc和tc。
如果两者都位于范围0..1内,则最近的距离点位于区段内且距离有效。
如果一个线段的参数超出此范围,请计算从另一个线段到该线段适当端点的距离。例如,如果sc < 0,则使用sc = 0。
如果两个参数都超出范围,请找出段末端组合的最小距离
这是否有帮助? http://stackoverflow.com/a/627578/106159 –