我有 4 个向量指向正方形的 4 个角。我想检测它们是否与指向其他地方的另一个向量有一定的接近度,如果是,则采取相应的行动。我发现了一种据说可以测量两条线段之间最近距离的算法,但我认为它无法正常工作:
public class Test : MonoBehaviour {
public void FixedUpdate() {
var source = new Vector3(0, 0, 0);
var target = new Vector3(0, 0, 4);
var otherSource = new Vector3(1.6f, 0, -0.5f);
foreach (var dir in new[] {
new Vector3(source.x + 1, source.y, source.z + 1),
new Vector3(source.x - 1, source.y, source.z + 1),
new Vector3(source.x + 1, source.y, source.z - 1),
new Vector3(source.x - 1, source.y, source.z - 1)
}) {
var A = source;
var B = otherSource;
var a = dir - A;
var b = target - B;
var n = Vector3.Cross(a, b);
var u = Vector3.Cross(n, A - B) / Vector3.Dot(n, n);
var AA = A - a * Vector3.Dot(b, u);
var BB = B - b * Vector3.Dot(a, u);
Debug.DrawRay(A, a, Color.blue);
Debug.DrawRay(B, b, Color.red);
Debug.DrawLine(AA, BB, Color.green);
}
}
}
现在,如果你运行它,你会看到类似这样的东西:
我希望看到四条绿线,但没有。如果我将 otherSource
向量向上移动一点,那么我会看到:
好一点了,但仍然不是我想要的。对调整此算法有帮助吗?
最佳答案
看来我误解了实际必须要做的事情。为了获得我需要的信息(一个点和一条射线之间的距离),我使用了这段代码:
public static float PointToRayDistance(Vector3 point, Vector3 origin, Vector3 target) {
var ray = new Ray(origin, target - origin);
var cross = Vector3.Cross(ray.direction, point - ray.origin);
return cross.magnitude;
}
希望它能对某人有所帮助。
我将保留原始问题的标题,因为我猜很多新手可能会使用相同的词寻找与我相同的东西:)
关于c# - 如何在Unity3d中测量两条线段之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309864/