准备知识
平面的一般式方程
Ax +By +Cz + D = 0
其中n = (A, B, C)是平面的法向量,D是将平面平移到坐标原点所需距离(所以D=0时,平面过原点)
向量的模(长度)
给定一个向量V(x, y, z),则|V| = sqrt(x * x + y * y + z * z)
向量的点积(内积)
给定两个向量V1(x1, y1, z1)和V2(x2, y2, z2)则他们的内积是
V1V2 = x1x2 + y1y2 + z1z2
有了上面的准备知识,则求点到直线的距离不再是难事,有图有真相
如果法相量是单位向量的话,那么分母为1
ORGE中的实现
顺便看一下Ogre中的实现
Real Plane::getDistance (const Vector3& rkPoint)const
{
return normal.dotProduct(rkPoint)+ d;
}
可见Ogre默认法相量为单位向量,且没有对结果取绝对值,根据注释,当点与法相量的方向在同一侧时,结果为正,否则为负。