2016-05-12 17 views
3

我正在使用System.Numerics編寫一些幾何代碼,我似乎遇到了一個執行Plane.CreateFromVertices方法的錯誤。 Plane.D評論說:是否System.Numerics向後飛?

該平面的距離原點沿法向量的距離。

但是如果我在Y = 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

你是對的。該文檔具有誤導性。比如我比較兩個不同的數學庫。 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