在三维中从起点和角度计算一条线

Calculating a line from a starting point and angle in 3d

本文关键字:计算 一条 三维 起点      更新时间:2023-10-16

我在3D空间中有一个点和两个角度,我想从这个信息计算结果线。我已经找到了如何用2D线条做到这一点,但不是3D。这是如何计算的呢?

如果它有帮助:我正在使用c++ &OpenGL并有用户鼠标点击的位置和摄像机的角度,我要追踪这条线为交点

在三角函数中,需要两个角和一个点来定义三维空间中的一条线。把它转换成(x,y,z)就是极坐标到直角坐标方程是:

x = r sin(q) cos(f)

y = r sin(q) sinf

z = r cos(q)

式中r为点p到原点的距离;线OP和正极轴(可以认为是z轴)之间的角度q(天顶);以及初始射线与OP在赤道面上的投影(通常从x轴开始测量)之间的角f(方位角)。

编辑:

好,这是你问的第一部分。剩下的部分,也就是问题更新后的真正问题,比仅仅在三维空间中用两个角度和一个点创建一条线要复杂得多。这涉及到使用相机到世界的转换矩阵,在其他SO问题中已经涉及到。为了方便起见,这里有一个问题:如何将世界坐标转换为相机坐标?答案包括从世界到相机和相机到世界的转换。

这条线可以理解为"时间"中的一个点。方程必须是矢量化的,或者有一个方向才有意义,所以时间是考虑它的自然方式。因此,三维空间中的直线方程实际上可以是与时间有关的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)。

所以要画这条线,只要把点填得尽可能细,只要需要,比如每千分之一秒,持续10秒左右,可能会画一条"线",实际上是一系列的点,从远处看是一条线,超过10秒的距离,由你选择的"速度"决定。