将平面从 Point/Normal/D 转换为平面方程

Convert a plane from Point/Normal/D to plane equation

我有一个飞机 class 存储飞机作为

Vector position;
Vector normal;
float d;

(向量只是辅助函数中的 x、y、z class)

多年来一直在使用它,几乎可以满足我的所有目的。然而,我把它当作一个专家使用,并没有真正考虑 how/why 它的工作原理。

所以...我需要将其转换为 float[4] 格式,供朋友用于某些 OpenGL 渲染。将point/normal/d转换为float[4]中的平面方程的正确方法是什么?我尝试的一切似乎都有点偏差。

[编辑] 这是飞机的Create()函数,给d赋值...

void            Create(Vector thePoint, Vector theNormal)
    {
        theNormal.Normalize();
        pos=thePoint;
        normal=theNormal;
        d=-theNormal.Dot(thePoint);
    }

使用齐次坐标的点是

 Point = [x,y,z,1] 

定义平面方程

你需要以下4个平面坐标值

Plane = [n_x,n_y,n_z,-d]

其中(n_x,n_y,n_z)是法向量,d到原点的距离。

现在点和平面的点积得到等式

[x,y,z,1] . [n_x,n_y,n_z,-d] = 0

x*n_x + y*n_y + z*n_z - d = 0

C#代码中这是

public float[] GetCoord(Plane plane)
{
   return new float[] { plane.normal.X, plane.normal.Y, plane.normal.Z, -plane.d };
}