在Matlab中使用来自C++的"engine.h"绘制四元数。

4
我有一个使用卡尔曼滤波器的C++算法。在代码的某个位置,我预测了一个四元数q',然后使用卡尔曼滤波器更新了四元数q
我想在Matlab中绘制两个图形,显示预测的四元数和校正(更新)的四元数的演变。因此,我使用“engine.h”库在处理期间将四元数信息发送到Matlab(实际上我发送的是4x1矩阵)。
因此,我的问题是:在Matlab中绘制四元数的最佳方法是什么,以便可以直观地提取信息?也许单独绘制角度会更好吗?

2
你的问题标题与实际问题不符。 - David Brown
1
如果我没记错的话,你的问题与“engine.h”或c++没有任何关系,对吗? - Andrey Rubshtein
好的,这是因为我将从C++代码发送命令,这可能会导致一些问题,所以后来很可能我会编辑问题并展示完整的代码。但是事实上,这个问题也可以用Matlab来思考。 - Jav_Rock
2个回答

4

如果问题是“如何以漂亮的方式可视化4D空间”,我可以想到几个选项:

  • 显示空间的多个切片,即对于(x,y,z,t) -> (x,y),(y,z)等。
  • 将(x,y)显示为散点图,并使用颜色编码z信息,点的大小编码t信息。为此,您可以使用scatter命令:

SCATTER(X,Y,S,C)在向量X和Y指定的位置显示着色圆圈(它们必须具有相同的大小)。

如果您的问题是“如何以漂亮的方式可视化四元数,请查看此内容


4
我认为一个好的选择是将四元数作为向量发送到MATLAB,使用C ++ MATLAB引擎。

[qx qy qz qw]

然后,在MATLAB环境中,您可以使用工具箱将其转换为欧拉角,这是一种常见的可视化选项。
要在MATLAB引擎中添加工具箱路径:
addpath(genpath('C:\Program Files (x86)\MATLAB\R2010a\toolbox\SpinCalc'));

使用spincalc工具箱,转换过程如下:
Angles=SpinCalc('QtoEA321',Quaternion,0,0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接