Являются ли плоскости System.Numerics в обратном направлении?

Я пишу некоторый геометрический код, используя System.Numerics, и я, кажется, столкнулся с ошибкой в ​​реализации Plane.CreateFromVertices метод. Комментарий к Plane.D говорит:

Расстояние плоскости от начала координат по ее нормальному вектору.

Однако, если я назову это с тремя вершинами при Y = 0.5, я получу плоскость:

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

D отрицательный! Итак, насколько я вижу, либо комментарий неправильный, и D должен быть помечен:

Расстояние начала координат от плоскости вдоль вектора нормали

или же Plane.CreateFromVertices неправильно, и D должен быть положительным.

Я прав (в этом случае я пойду писать отчет об ошибке), или я что-то здесь неправильно понимаю (в каком случае, что и почему?).

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

Вы правы в том, что вам, вероятно, следует читать это как расстояние от начала координат плоскости до начала системы координат в направлении нормали плоскости.

Другие вопросы по тегам