Python 使用位置和四元数在Matplotlib中打印三维矢量

Python 使用位置和四元数在Matplotlib中打印三维矢量,python,matplotlib,quaternions,Python,Matplotlib,Quaternions,我有以下资料: 位置点(x、y、z) 四元数方向(w,i,j,k) 我想在Matplotlib中将其绘制为三维矢量。我在Matplotlib中看到了许多关于绘制3D向量的问题。例如,我知道我可以在Matplotlib中绘制给定两点的向量,起点(x,y,z)和终点(x,y,z),如下所示 start=[2 3 5]; 结束=[4 5]; 箭袋3(开始(1)、开始(2)、开始(3)、结束(1)、结束(2)、结束(3)); 我的问题是:如何将位置和四元数转换为起点和终点,以便将其绘制为向量,或者

我有以下资料:

  • 位置点(x、y、z)
  • 四元数方向(w,i,j,k)
我想在Matplotlib中将其绘制为三维矢量。我在Matplotlib中看到了许多关于绘制3D向量的问题。例如,我知道我可以在Matplotlib中绘制给定两点的向量,起点(x,y,z)和终点(x,y,z),如下所示

start=[2 3 5];
结束=[4 5];
箭袋3(开始(1)、开始(2)、开始(3)、结束(1)、结束(2)、结束(3));
我的问题是:如何将位置和四元数转换为起点和终点,以便将其绘制为向量,或者如何直接绘制位置和四元数

注意:我有在3D中绘制我的位置的代码,我只是不确定如何获得方向:

ax.set_标题(“位置:(“+str(x)+”、“+str(y)+”、“+str(z)+”))
ax.set_xlim([-5,5])
ax.set_ylim([-5,5])
ax.set_zlim([0,5])
ax.设置标签(“X轴”)
ax.set_ylabel(“Y轴”)
ax.set_zlabel(“Z轴”)
最大散射(x,y,z)

我找到了一个使用的部分解决方案。在中,有一种将四元数转换为欧拉角的方法,使用:

从tf.transformations从四元数导入euler\u
四元数=(w,i,j,k)
euler=来自四元数(四元数)的euler
然后,我可以使用以下方法绘制偏航:

yaw=euler[2]
新_x=sin(偏航)
新的y=cos(偏航)
self.ax.quiver(x,y,z,new\ux,new\uy,0,color='b')

我认为在纯Python中应该有一种方法可以做到这一点,并且应该有一种方法可以获得所有角度,但是我决定将此作为一种部分解决方案,以防任何人遇到相同的问题,而这里没有其他人回答。

使用Euler angles的问题之一是,它可能无法正确反映设备的旋转。例如{180,180,0}与{0,0,180}相同(横滚、俯仰、偏航)