不同坐标系下相机射线俯仰角计算及Reflected_Ray分量角度求解
计算Reflected_Ray向量在XZ平面分量的角度
原理说明
要计算目标角度,核心是提取向量的X、Z分量(忽略Y分量),再计算该投影分量与X轴正方向的夹角:
- 从
Reflected_Ray向量中提取x和z分量,构造XZ平面上的投影向量(x, 0, z) - 使用
atan2(z, x)计算弧度值(参数顺序对应垂直轴、水平轴,适配右手坐标系规则),再通过弧度转角度得到最终结果 - 若需要0°~360°的常规角度范围,可对负角度做加360°的修正
可复现代码与可视化
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 模拟plant坐标系下的Reflected_Ray向量(终点位于world的XY平面,示例值可替换为实际转换结果) Reflected_Ray = np.array([1.5, 2.0, -1.0]) # 提取XZ平面分量 xz_component = np.array([Reflected_Ray[0], 0, Reflected_Ray[2]]) # 计算角度(与X轴正方向的夹角) angle_rad = np.arctan2(xz_component[2], xz_component[0]) angle_deg = np.rad2deg(angle_rad) # 转换为0~360°范围 if angle_deg < 0: angle_deg += 360 print(f"XZ平面分量与X轴正方向的角度:{angle_deg:.2f}°") # 3D可视化 fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制plant坐标系轴 ax.quiver(0,0,0, 3,0,0, color='r', label='Plant X轴') ax.quiver(0,0,0, 0,3,0, color='g', label='Plant Y轴') ax.quiver(0,0,0, 0,0,3, color='b', label='Plant Z轴') # 绘制原向量与XZ分量 ax.quiver(0,0,0, Reflected_Ray[0], Reflected_Ray[1], Reflected_Ray[2], color='m', linewidth=2, label='Reflected_Ray') ax.quiver(0,0,0, xz_component[0], xz_component[1], xz_component[2], color='c', linewidth=2, linestyle='--', label='XZ平面分量') # 标注图像点对应的3D终点 ax.scatter(Reflected_Ray[0], Reflected_Ray[1], Reflected_Ray[2], color='k', s=50, label='图像点对应3D点') # 设置可视化参数 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.set_title('Reflected_Ray向量及其XZ分量可视化') ax.legend() ax.set_box_aspect([1,1,1]) plt.show()
代码说明
- 模拟的
Reflected_Ray向量可直接替换为实际从图像点转换得到的向量值 atan2(z, x)的计算逻辑确保角度符合坐标系方向规则,结果修正为0~360°更便于工程应用- 可视化部分直观展示了原向量、XZ平面投影分量以及对应的3D终点位置,便于验证计算结果
内容的提问来源于stack exchange,提问作者Ecu
相关产品推荐
相关产品推荐

