我在3D空间和两个角度有一个点,我想根据这些信息计算得到的线。我已经找到了如何使用2D线,但不是3D。如何计算?
如果有帮助:我正在使用C ++& OpenGL并具有用户鼠标点击的位置和摄像机的角度,我想跟踪这条线路的交叉点。
答案 0 :(得分:2)
该线可以被视为“时间”中的一个点。方程必须是矢量化的,或者有一个有意义的方向,所以时间是一种自然的思考方式。因此,3维线的方程实际上可能是与时间相关的x,y,z的三个二维方程,例如:
x = ax*t + cx
y = ay*t + cy
z = az*t + cz
要找到那组方程式,假设相机在原点,(0,0,0),你的点是(x1,y1,z1)那么
ax = x1 - 0
ay = y1 - 0
az = z1 - 0
cx = cy = cz = 0
所以
x = x1*t
y = y1*t
z = z1*t
注意:这也假设线或矢量的“速度”是在1秒后它在你的点(x1,y1,z1)。
所以要绘制那条线,只要你想要的就可以填充你想要的点数,例如每隔1/1000秒,持续10秒或者什么,可能会画一条“线”,真是一系列的从远处看到的点数显示为一条线,超过10秒的距离,由您选择的“速度”决定。
答案 1 :(得分:2)
在三角形中,需要两个角度和一个点来定义3d空间中的一条线。将其转换为(x,y,z)只是极坐标到笛卡尔坐标,方程是:
x = r sin(q)cos(f)
y = r sin(q)sin(f)
z = r cos(q)
其中r是从点P到原点的距离;线OP与正极轴之间的角度q(天顶)(可以认为是z轴);和初始射线与OP投影到赤道平面之间的角度f(方位角)(通常从x轴测量)。
编辑:
好的,那是你问的第一部分。其余部分,问题更新后的真正问题,比仅仅从2个角度和3d空间中的点创建一条线要复杂得多。这涉及使用相机到世界的转换矩阵,并在其他SO问题中有所涉及。为方便起见,这里有一个:How does one convert world coordinates to camera coordinates?答案涵盖从世界到相机和相机到世界的转换。