如何计算拟合三维点集的平面与垂直Z轴的夹角
计算拟合平面与Z轴的夹角
你已经通过最小二乘法得到了平面方程 (a x + b y + c z + d = 0),要计算这个平面与Z轴的夹角,可以按照以下几何思路实现:
核心原理
平面与Z轴的夹角,本质是Z轴与平面之间的最小夹角,它等于Z轴方向向量与平面法向量夹角的补角(取锐角)。具体推导:
- 平面的法向量为 (\mathbf{n} = (a, b, c))
- Z轴的方向向量为 (\mathbf{k} = (0, 0, 1))
- 法向量与Z轴的夹角 (\phi) 满足:(\cos\phi = \frac{\mathbf{n} \cdot \mathbf{k}}{|\mathbf{n}| \cdot |\mathbf{k}|} = \frac{c}{\sqrt{a^2 + b^2 + c^2}})
- 平面与Z轴的夹角 (\theta) 是 (\theta = 90^\circ - \phi),转换为三角函数关系可得:(\sin\theta = |\cos\phi|),因此 (\theta = \arcsin\left( \frac{|c|}{\sqrt{a^2 + b^2 + c^2}} \right))
若需要角度值(而非弧度),只需将结果转换为角度单位即可。
代码实现
在你现有的代码基础上,添加以下计算逻辑:
import numpy as np # 你已得到的平面系数 a, b, c, d = C[0], C[1], -1., C[2] # 计算法向量的模长 norm_n = np.sqrt(a**2 + b**2 + c**2) # 计算平面与Z轴的夹角(弧度) theta_rad = np.arcsin(np.abs(c) / norm_n) # 转换为角度(可选) theta_deg = np.degrees(theta_rad) print(f"平面与Z轴的夹角(弧度):{theta_rad}") print(f"平面与Z轴的夹角(角度):{theta_deg}")
验证示例
- 当平面平行于XY平面((a=0, b=0)),法向量与Z轴平行,此时平面与Z轴夹角为0°,符合预期;
- 当平面垂直于XY平面(如平面方程为 (x=0)),法向量与Z轴垂直,此时平面与Z轴夹角为90°,符合几何逻辑。
内容的提问来源于stack exchange,提问作者Sadae
相关产品推荐
相关产品推荐

