我在3D空间中有一个点,并且有两个角度,我想根据此信息计算出结果线。我发现如何用2D线而不是3D来做到这一点。如何计算呢?
如果有帮助,请执行以下操作:我正在使用C ++和OpenGL,并具有用户单击鼠标的位置和摄像头的角度,因此我想在这条线上找到交点。
最佳答案
用trig术语来说,需要两个角度和一个点来定义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在赤道平面上的投影之间的夹角f(方位角)(通常从x轴测量)。
编辑:
好的,那是您要问的第一部分。剩下的部分,即问题更新后的实际问题,比仅仅从2个角度和3d空间中的点创建一条线要复杂得多。这涉及使用摄像机到世界的转换矩阵,其他SO问题也对此进行了介绍。为了方便起见,这里是一个:How does one convert world coordinates to camera coordinates?答案涵盖了从世界到相机和相机到世界的转换。
关于c++ - 在3D中从起点和角度计算直线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8686554/