2016-05-12 9 views
3

System.Numericsを使ってジオメトリコードを書いていますが、Plane.CreateFromVerticesメソッドの実装にバグがありました。 Plane.Dにコメントは述べています:System.Numerics Planesは後方にありますか?

その法線ベクトルに沿って原点から平面までの距離。

は、しかし、私は飛行機を得るYの3つの頂点= 0.5でこれを呼び出す場合:

N = (0, 1, 0) 
D = -0.5 

Dは負であります!だから、私の知る限りのいずれかのコメントが間違っている、とDを標識する必要があります。

またはPlane.CreateFromVerticesが間違っている法線ベクトルに沿って平面からの起源の距離、およびD正でなければならない。

私は正しいですか(その場合、バグレポートを書くことにします)、または私はここで何かを誤解していますか(その場合、何や理由?)。

+2

おそらく放置されていますか? :D – leppie

+0

私が左利きであるかどうかは、私の読解に多大な影響を与えません。P – Martin

+0

@leppieは[右手のルール](http:// mathworld .wolfram.com/Right-HandRule.html)詳細は私の答えを見てください。 – bradgonesurfing

答えて

1

あなたは正しいです。ドキュメントは誤解を招くようなものです。たとえば、2つの異なる数学ライブラリを比較します。 System.NumericsとAccord.Math

public void RightHandRulePlane_Accord() 
    { 
     { 
      var plane = System.Numerics.Plane.CreateFromVertices 
       (
       new System.Numerics.Vector3(0, 0.5f, 0) 
       , new System.Numerics.Vector3(1, 0.5f, 0) 
       , new System.Numerics.Vector3(0, 0.5f, 1)); 

      Console.WriteLine(plane.ToString()); 

      plane = System.Numerics.Plane.CreateFromVertices 
       (
       new System.Numerics.Vector3(0, 0.5f, 1) 
       , new System.Numerics.Vector3(1, 0.5f, 0) 
       , new System.Numerics.Vector3(0, 0.5f, 0) 
       ); 

      Console.WriteLine(plane.ToString()); 

     } 
     { 
      var plane = Accord.Math.Plane.FromPoints 
       (
       new Accord.Math.Point3(0, 0.5f, 0) 
       , new Accord.Math.Point3(1, 0.5f, 0) 
       , new Accord.Math.Point3(0, 0.5f, 1)); 

      Console.WriteLine(plane.ToString()); 

      plane = Accord.Math.Plane.FromPoints 
       (
       new Accord.Math.Point3(0, 0.5f, 1) 
       , new Accord.Math.Point3(1, 0.5f, 0) 
       , new Accord.Math.Point3(0, 0.5f, 0) 
       ); 

      Console.WriteLine(plane.ToString()); 
     } 
    } 

出力は

{Normal:<0, -1, 0> D:0.5} 
{Normal:<0, 1, 0> D:-0.5} 
0x -1y 0z +0.5 = 0 
0x +1y 0z -0.5 = 0 

ある署名値+0.5は、あなたはおそらく必要があることで正しい式で

ax + by + cz + d = 0 

定数項でありますそれを平面原点から平面法線の方向の座標系原点までの距離として読んでください。

+0

私が尋ねるのは、定義の表現です。あなたは「D値は原点からの法線方向の距離でなければならない」と言っていますので、原点で*出発*として、飛行機の法線にどれくらいの距離があるかを読んでいます。しかし、あなたが見せる出力は、それとは逆です。つまり、飛行機から出発して原点に向かう距離です。私はこれを間違って読んでいますか? – Martin

+0

実際にあなたは良い点があり、正しいです。何が起こっているのかを明確にする別のライブラリの実験を使って、私の答えを更新しました。 – bradgonesurfing

関連する問題