C# 如何在Unity3d中测量两条线段之间的距离

C# 如何在Unity3d中测量两条线段之间的距离,c#,math,unity3d,C#,Math,Unity3d,我有4个向量指向正方形的4个角。我想检测它们是否与指向其他地方的另一个向量在某种程度上接近,如果是,则相应地采取行动。我发现了一种算法,据说它可以测量两条线段之间的最近距离,但它不能正常工作,我认为: public class Test : MonoBehaviour { public void FixedUpdate() { var source = new Vector3(0, 0, 0); var target = new Vector3(0, 0,

我有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;
}
希望它能帮助别人


我将保留原始问题的标题,因为我想很多新手可能会寻找与我相同的东西,使用相同的词:)

矢量3.距离
用于计算两个矢量之间的距离您还可以减去两个矢量并得到幅值平方,这对于比较很好。指向其他地方的另一个矢量是什么?测量两个向量之间的最近距离,是指两点之间的距离还是由两点定义的两段/直线之间的距离?如果您试图获得两条3D直线之间的距离,请参见和。@Programmer,我的表达不正确-我指的是线段。在这种情况下,如果我使用
Vector3.Distance
我得到的值是:
2.384186E-07
6.743496E-07
,它们是不正确的,因为它们太小,变化不够大(为什么是2个不同的值而不是4个?)。