CC影子

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

准备知识

平面的一般式方程

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默认法相量为单位向量,且没有对结果取绝对值,根据注释,当点与法相量的方向在同一侧时,结果为正,否则为负。

作者:zdd
出处:http://www.cnblogs.com/graphics/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
posted on 2016-01-27 10:00  CC影子  阅读(2890)  评论(0编辑  收藏  举报