原点到平面的距离(最短)

Ily*_*lya 1 math 3d

所以我正在阅读这个页面上的内容(http://gamedeveloperjourney.blogspot.com/2009/04/point-plane-collision-detection.html)

提交人提到

 d = - D3DXVec3Dot(&vP1, &vNormal);
Run Code Online (Sandbox Code Playgroud)

其中vP1是平面上的一个点,vNormal是平面的法线.我很好奇这是如何让你与世界起源的距离,因为结果总是为0.此外,为了清楚(因为我对平面方程的d部分仍然有些朦胧),在一个平面方程式中,是从一条直线穿过世界原点到平面原点的距离?

650*_*502 6

在一般情况下,点p和平面之间的距离可以通过计算

<p - p0, normal>
Run Code Online (Sandbox Code Playgroud)

<a, b>点积运算在哪里?

<a, b> = ax*bx + ay*by + az*bz
Run Code Online (Sandbox Code Playgroud)

p0是在平面上的点.

平面点距离

n具有单位长度时,矢量与它之间的点积是矢量在法线上的投影的(带符号)长度

您报告的公式只是点p是原点时的特殊情况.在这种情况下

distance = <origin - p0, normal> = - <p0, normal>
Run Code Online (Sandbox Code Playgroud)

这种平等是形式错误的,因为点积是关于向量而不是点......但仍然保持数字.写下明确的公式就可以了

(0 - p0.x)*n.x + (0 - p0.y)*n.y + (0 - p0.z)*n.z
Run Code Online (Sandbox Code Playgroud)

是相同的

- (p0.x*n.x + p0.y*n.y + p0.z*n.z)
Run Code Online (Sandbox Code Playgroud)

事实上,存储一个平面的一个好方法是保存正常n和值k = <p0, n>这里p0是在飞机上点(价值k是独立于这点您选择的平面).