簡體   English   中英

如何在Unity3d中測量兩條線段之間的距離

[英]How to measure the distance between two line segments in 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);
        }
    }
}

現在,如果運行它,您將看到類似以下內容:

在此處輸入圖片說明

我希望看到四個綠線,但是沒有。 如果我稍微向上移動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;
}

希望它將對某人有所幫助。

我要保留原始問題的標題,因為我想很多新手可能會使用相同的詞來尋找與我所做的相同的事情:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM