2017-09-19 9 views
2

四角の四隅を指すベクトルが4つあります。私は彼らがどこか他の場所を指し示す別のベクターにある程度近接しているかどうかを検出し、そうであればそれに応じて検出したいと思います。私は2つの線分間の最短距離を測定していると言わアルゴリズムを発見したが、それが正常に動作していないが、私は思う:Unity3dの2つの線分間の距離を測定する方法

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

私は4本の緑色のラインが見たいと思っていましたが、何もありません。だから、少し良く

enter image description here

、それでも私は探していない何を:私はotherSourceベクトルを少し上に移動hovewer場合、私はこれを参照してください。このアルゴリズムを調整する助け?

+2

'Vector3.Distance'が2間の距離を見つけるために使用されますベクトル – Programmer

+0

また、2つのベクトルを減算することもできますし、大きさを2乗して比較することもできます。 – George

+1

他のどこかを指している別のベクトル*は何ですか?そして、2つのベクトル*の間の最短距離を測定すると、2点間の距離*または2点で定義される2つの線分/線を意味しますか? – zwcloud

答えて

0

実際に何をすべきか誤解しているようです。

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; 
} 

がうまくいけば、それが誰かを助ける:私は必要な情報を取得するには(ポイントと線の間の距離が)私はこのコードを使用していました。

私は初心者の多くは、私がやった同じものを探すことができると思いますので、私は同じ言葉を使って、元の質問のタイトルを残している:)

関連する問題