C++ 在二维图像上绘制欧拉角旋转模型
我目前正在尝试在二维图像中绘制欧拉角度的三维表示(没有opengl或三维图形窗口)。图像输出可以类似于以下内容 本质上,我正在寻找一种研究或算法,它可以获取一个旋转矩阵或一组欧拉角,然后将它们输出到2d图像上,如上图所示。这将在使用OpenCV的C++应用程序中实现。它将用于根据对象的状态在OpenCV窗口上输出注释信息 我想我考虑得太多了,因为我应该能够从旋转矩阵中分解单位向量,然后提取它们的x,y分量,并在笛卡尔空间中从(0,0)中画一条线。我的想法正确吗 编辑:我正在寻找正交投影。您可以假设上面的图像具有正确的相机/视角 任何帮助都将不胜感激 谢谢 编辑:示例源代码现在可以在my repo中找到。 标题: 类别定义: 这不是最好的代码,但它很有效,并显示了获得公认答案中描述的投影矩阵所需的步骤C++ 在二维图像上绘制欧拉角旋转模型,c++,opencv,euler-angles,C++,Opencv,Euler Angles,我目前正在尝试在二维图像中绘制欧拉角度的三维表示(没有opengl或三维图形窗口)。图像输出可以类似于以下内容 本质上,我正在寻找一种研究或算法,它可以获取一个旋转矩阵或一组欧拉角,然后将它们输出到2d图像上,如上图所示。这将在使用OpenCV的C++应用程序中实现。它将用于根据对象的状态在OpenCV窗口上输出注释信息 我想我考虑得太多了,因为我应该能够从旋转矩阵中分解单位向量,然后提取它们的x,y分量,并在笛卡尔空间中从(0,0)中画一条线。我的想法正确吗 编辑:我正在寻找正交投影。您可以
这里还有一个youtube视频,显示了正在运行的投影矩阵(以及添加的缩放和平移):旋转矩阵将很容易显示 旋转矩阵可以通过使用法线、副法线和切线来构造 您应该能够按如下方式将它们取回:-
Bi-Normal (y') : matrix[0][0], matrix[0][1], matrix[0][2]
Normal (z') : matrix[1][0], matrix[1][1], matrix[1][2]
Tangent (x') : matrix[2][0], matrix[2][1], matrix[2][2]
使用透视变换可以添加透视(x,y)=(x/z,y/z)
要获得与所示类似的正交项目,您需要乘以另一个固定旋转矩阵以移动到“摄影机”视图(右45°,然后向上)
然后可以将端点x(1,0,0)、y(0,1,0)、z(0,0,1)和中心(0,0,0)乘以最终矩阵,仅使用x,y坐标
中心应始终变换为0,0,0
然后,您可以缩放这些值以绘制二维画布。这是我的两分钱。希望能有帮助 如果我理解正确,您希望旋转三维坐标系,然后将其正交投影到给定的二维平面上(二维平面是相对于原始未旋转的三维坐标系定义的) “旋转和投影三维坐标系”是“旋转三个三维基向量并将其正交投影到二维平面上,使其成为相对于平面二维基的二维向量”。让原始3D向量未加底漆,并对生成的2D向量加底漆。设{e1,e2,e3}={e1..3}为三维正交基(已给出),{e1',e2'}={e1..2'}为二维正交基(必须定义)。本质上,我们需要找到这样的操作符PR,它PR*v=v' 虽然我们可以谈论很多关于线性代数、算子和矩阵表示的内容,但这篇文章太长了。我只想说:
( -1/sqrt(2) 1/sqrt(2) 0 )
( -1/sqrt(6) -1/sqrt(6) 2/sqrt(6) )
其中第一列、第二列和第三列被转换{