首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Numerics飞机是向后的吗?

System.Numerics飞机是向后的吗?
EN

Stack Overflow用户
提问于 2016-05-12 19:16:05
回答 1查看 484关注 0票数 3

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

飞机与原点沿法向量的距离。

然而,如果在Y= 0.5处有三个顶点,我就会得到这个平面:

代码语言:javascript
复制
N = (0, 1, 0)
D = -0.5

D是负的!因此,据我所知,这一评论要么是错误的,要么是D应该贴上标签:

原点沿法向量与平面的距离

或者Plane.CreateFromVertices是错的,D应该是正的。

我是正确的(在这种情况下,我要去写错误报告),还是我在这里误解了什么(在这种情况下,什么以及为什么?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 06:04:02

你是对的。这些文件有误导性。例如,我比较了两个不同的数学库。System.Numerics和Accord.Math

代码语言:javascript
复制
    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() );
        }
    }

输出是

代码语言:javascript
复制
{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是方程中的常数项。

代码语言:javascript
复制
ax + by + cz + d = 0

你是对的,因为你可能应该把它读成平面原点到坐标系原点的距离,在平面法线方向上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37195648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档