c# - 如何在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);
        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);
        }
    }
}

现在,如果你运行它,你会看到类似这样的东西:

enter image description here

我希望看到四条绿线,但没有。如果我将 otherSource 向量向上移动一点,那么我会看到:

enter image description here

好一点了,但仍然不是我想要的。对调整此算法有帮助吗?

最佳答案

看来我误解了实际必须要做的事情。为了获得我需要的信息(一个点和一条射线之间的距离),我使用了这段代码:

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/

相关文章:

c# - 如何将此字符串拆分为数组?

c# - 如何使用 asp.net mvc 3 和 c# 清除 cookie?

c# - 通过脸部中心进行光标移动?

css - 将直立元件定位在旋转容器内

c++ - 如何在顶部 2D 小 map 上显示以 3D 视角呈现的平面世界的可见部分?

c# - 顺利移动我的游戏对象的最佳方式?

c# - 在给定的用户列表中分布

javascript - 使用 javascript 和 regex 将文本更改为内联 TeX

c# - 在 Unity 中使用 OnMouseDrag 在屏幕上拖动时如何禁用按钮 OnClick

unity3d - 如何从Unity3d摄像头抓取帧并实时显示在另一个rawImage上?