将平面从 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 };
}
我有一个飞机 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 };
}