|
关于3D平面的一些小知识总结,主要是一些中学数学知识。
3D平面的定义方式有多种,不过所有的方式都可以由最简单的形式(即不在同一直线上的三个点确定一个平面)推导出。
1 一般式
假设我们有三个点 p_0, p_1, p_2 ,如图1所示。

图1 确定一个平面的三个点及其法线
本文主要参考这篇文章,图1也来自它。 图1中三个点对应的平面的平面方程(即空间中所有处于同一平面的点所对应的方程)最常见的形式:
Ax+By+Cz+D=0
系数 A, B, C, D 计算方法如下:
- 计算向量 v=p_1 - p_0 ,向量 u=p_2 - p_0
- 计算 n=v\times u (叉乘)
- 归一化(normalize) n
- 实际上上面得到的 n 即为平面法线,则
5. 为了计算 D ,只需要代入平面内的任意一点,比如, p_0 ,得到 D=-(Ax+By+Cz)=-n\cdot p_0 (点乘)
为什么平面方程是这样的?其实给定平面上的一个点p和平面的法线n,就可以确定该平面了。因为对于平面上任意一点q=(x, y),向量pq一定垂直于法线n。而点p与平面外的点的连线对应的向量和n是不垂直的。而垂直的定义就是点积为0,即 n\cdot(q-p)=0 ,即 n_x(x-p_x) + n_y(y-p_y)+n_z(z-P_z)=0 ,即 n_x x+n_y y + n_z z - (n_x p_x + n_yp_y+n_zp_z)=0 ,这恰好就是最上面的平面方程的常见形式。这种由一个点及法线表示平面方程的方法叫点法式。 2 截距式
当平面方程的一般式 Ax+By+Cz+D=0 ,中 D\neq 0 时,设 a=\frac{-D}{A}, b=\frac{-D}{B}, c=\frac{-D}{C} ,可推导出平面方程的截距式: \frac{x}{a}+\frac{y}{b}+\frac{z}{c}=1 。
则此截距式平面方程对应的平面与三个坐标轴的交点分别为 (a, 0, 0), (0, b, 0), (0, 0, c) ,其中 a, b, c 依次为该平面在x, y, z轴上的截距。
3 点到平面的距离
假设已求得了平面的一般式方程 Ax+By+Cz+D=0 ,另设三维空间中有一点 r=(x_r, y_r,z_r) ,则 r 到此平面的距离为:
dist=Ax_r + By_r + C*z_r+D=n\cdot r + D
实际上点 r 到平面的距离应该是此处 dist 的绝对值。也即此处的 dist 是一个有符号距离,如果 dist 为0,则表面点r在平面上; 如果 dist 大于0, 则r在法线n所指的那一边;如果 dist 小于0,则r在法线所指的反方向那一边。即有符号距离 dist 是很有用的,通过它就可以判断点在平面的哪一边。
为啥点到平面的距离是这样计算的?很简单,此处略微说明:
要求点 r 到平面的距离,只需要找平面上任意一点 p_0 ,求从 p_0 指向 r 的向量 v ,把 v 投影往平面的单位法线 n 上做投影(即 v\cdot n ),则投影的长度即为点 r 到平面的距离。此处主要用到向量点积,以及一个潜在条件: Ax_0+By_0+Cz_0+D=0 。很容易证明。
由此可知,原点(0, 0, 0)到平面的距离恰好就是D 4 把点投影到平面
注意 1中已说明(A, B, C)是平面的单位法向量,则 A^2+B^2+C^2=1 。
设三维空间中一点p=(x, y, z),要求p在平面上的投影点q。
易知pq垂直于平面,则pq平行于平面的法线(A, B, C)。所以,设参数t,则:
\frac{x - x_q}{A}=\frac{y-y_q}{B}=\frac{z-z_q}{C}=t,
所以:
x_q = x - tA, \quad y_q=y-tB,\quad z_q = z-tC
又投影点q在平面上,所以满足平面方程:
Ax_q + By_q + Cz_q + D = 0,
即:
A(x-tA)+B(y-tB)+C(z-tC)+D=0
可求得:
t=\frac{Ax+By+Cz+D}{A^2+B^2+C^2}=Ax+By+Cz+D=dist
其中 dist 即为点p到平面的垂直有向距离
故,投影点为 q=p-n*dist
References:
|
|