在三维中从起点和角度计算一条线
Calculating a line from a starting point and angle in 3d
我在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秒的距离,由你选择的"速度"决定。
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何在 Win32 中用一条线连接 2 个文本框?
- C++ 如何在同一行中和在一条线上?
- 如何在SDL2窗口上使用Cairo绘制一条白色直线
- 如何计算两条线段的相交位置
- 在Opengl中绘制一条不显示C++的线
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- x86 - 为什么编译器在下一条指令中插入看似毫无意义的JMP?
- CMake似乎忽略了一条线
- 在C 中使用Legacy OpenGL(即时模式)绘制一条厚线
- 计算一次占用的最大房间数
- 在图像标签上画一条线并计算距离
- switch 语句结束和下一条语句之间的时间是否具有确定性(与路径无关)
- 如何在OMNET++中收到来自前一个模块的所有消息后将一条消息发送到下一个模块
- 一条线和两行声明之间的差异
- C++ OpenCV:检测两条线而不是一条线(Canny & findContours)
- 如何在C++中将边列表转换为邻接矩阵,其中包含连接到顶点的边数而不是一条边?
- 在三维中从起点和角度计算一条线
- 计算有一条垂直线的交点
- 在c++ 3D中计算一个矩形是否与一条射线相交