4

我正在尝试制作一个简单的 QML 组件,该组件将项目旋转​​给定的四元数。

我从 ArUco 获得 OGRE 四元数类型的四元数,并将其应用于 QMatrix4x4。然后我从矩阵中获取 QTransform 并尝试将其应用于画家。不幸的是,效果完全不同:

void Marker::paint(QPainter *painter) 
{ 
  QMatrix4x4 mat; 
  QQuaternion q = QQuaternion(0.883290,-0.128302,0.436779,-0.112081); 
  mat.rotate(q);

  QRect rect = QRect(width()/4,height()/4,width()/2,height()/2);

  painter->setTransform(mat.toTransform()); 
  painter->fillRect(rect, Qt::red); 
}

结果是:

在此处输入图像描述

它应该看起来像这样:

在此处输入图像描述

UPDATE#1:我认为问题在于我用方向四元数旋转矩阵,而我可能应该以其他方式应用该方向?我不完全理解四元数,如果这是一个错误,有人可以解释一下吗?

更新#2:我阅读了更多关于它的内容,结果证明方向是相对于参考位置的旋转。我确实认为我有这样的职位,我不知道如何申请。

4

1 回答 1

1

上面的代码是对的,我的例子是它实际上是一个立方体而不是一个简单的矩形,结果是立方体的前壁。所以基本上我所要做的就是:

QQuaternion q = QQuaternion(0.883290,-0.128302,0.436779,-0.112081); 
QQuaternion y90 = QQuaternion(sqrt(0.5),sqrt(0.5),0,0); // 90 degree around x quaternion

QQuaternion wyn = q*y90;
wyn = wyn.normalized(); // not needed in this case but if you want to rotate for say 180 degrees it's needed
于 2013-07-30T07:25:46.430 回答