Sha*_*ley 0 c++ math geometry trigonometry
我在 3D 空间中有一个点和两个角度,我想根据这些信息计算结果线。我已经找到了如何用 2D 线来做到这一点,但不是 3D。如何计算?
如果有帮助:我正在使用 C++ 和 OpenGL 并且有用户点击鼠标的位置和相机的角度,我想跟踪这条线的交叉点。
在三角术语中,需要两个角度和一个点来定义 3d 空间中的一条线。将其转换为 (x,y,z) 只是将极坐标转换为笛卡尔坐标,方程为:
x = r sin(q) cos(f)
y = r sin(q) sin(f)
z = r cos(q)
其中 r 是点 P 到原点的距离;线 OP 与正极轴(可以认为是 z 轴)之间的角度 q(天顶);以及初始光线和 OP 在赤道平面上的投影(通常从 x 轴测量)之间的角度 f(方位角)。
编辑:
好的,这是你问的第一部分。其余部分,即问题更新后的真正问题,比仅从 2 个角度和 3d 空间中的一个点创建一条线要复杂得多。这涉及使用相机到世界的转换矩阵,并在其他 SO 问题中有所介绍。为方便起见,这里有一个:如何将世界坐标转换为相机坐标? 答案包括从世界到相机和相机到世界的转换。