3

我正在使用 System.Numerics 编写一些几何代码,我似乎在该Plane.CreateFromVertices方法的实现中遇到了一个错误。评论Plane.D说:

平面沿其法线向量到原点的距离。

但是,如果我在 Y = 0.5 处用三个顶点调用它,我会得到平面:

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

D是负数!据我所知,评论是错误的,应该将 D 标记为:

原点到平面沿法线向量的距离

orPlane.CreateFromVertices是错误的,D 应该是正数。

我是正确的(在这种情况下我应该去写一个错误报告),还是我在这里误解了一些东西(在这种情况下,是什么以及为什么?)。

4

1 回答 1

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

您是正确的,您可能应该将其解读为在平面法线方向上从平面原点到坐标系原点的距离。

于 2017-07-13T06:04:02.893 回答