我找不到一种一致的方法来计算点和平面之间的有符号距离。如果给定由一个点和一个法向量定义的平面,我该如何计算这个距离?
struct Plane
{
Vec3 point;
Vec3 normal;
}
我找不到一种一致的方法来计算点和平面之间的有符号距离。如果给定由一个点和一个法向量定义的平面,我该如何计算这个距离?
struct Plane
{
Vec3 point;
Vec3 normal;
}
你让事情变得太复杂了。如果你的法线已经被标准化,你只需要这样做:
float dist = dotProduct(p.normal, (vectorSubtract(point, p.point)));
point
和p
之间的有符号距离。在你的情况下,你认为它是多少?我认为是-200。 - Beta-200
的距离。那么如果我说通过使用dotProduct
我们可以找到两点之间的距离,这样说是否正确? - Bla...p
和 q
之间的距离是 sqrt((p-q).(p-q))
。 - Betad = point - p.point
。然后我们将 d
投影到法线上。投影公式为 p=dot(d,n)/||n||^2*n={n is unit}=dot(d,n)*n
。由于 n
是单位向量,因此该向量的有符号长度为 dot(d,n)
。 - Alexander Torstling对于那些好奇Beta发布的点积公式是如何推导出来的人,这里有一个可视化证明:
N Q
^ / |
| / | d
| / |
|/ |
---------- P -------+------ > plane
d是Q点到平面的有向距离
P是位于平面上的已知点。
N是垂直于P点处平面的法向单位向量。
为了找到d,我们将d移动到P和N所在的位置。
N
^
|
|
+--------Q
| /
d | /
|θ /
|/
---------- P -------------- > plane
使用余弦函数
cos(θ) = adjacent / hypotenuse
cos(θ) = d / |PQ| -- |PQ| is length of (Q-P)
d = |PQ| x cos(θ) -- Equation 1
a · b = |a| × |b| × cos(θ)
N . (Q-P) = |N| x |PQ| x cos(θ)
N . (Q-P) = 1 x |PQ| x cos(θ) -- |N| is 1 because unit vector
|PQ| x cos(θ) = N . (Q-P) -- Equation 2
用方程1替换方程2的左侧
d = N . (Q-P)