如何将 QVector3D 与 QMatrix3x3 相乘?
Posted
技术标签:
【中文标题】如何将 QVector3D 与 QMatrix3x3 相乘?【英文标题】:How do I multiply a QVector3D with a QMatrix3x3? 【发布时间】:2020-11-07 18:28:44 【问题描述】:这个问题听起来很简单,但是这行代码没有运行,因为没有为 QVector3D 和 QMatrix 定义运算符 *。我看过文档,它似乎不存在。有没有办法做到这一点?如果没有,有什么具体原因吗?
QVector3D r_new = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45).toRotationMatrix() * r;
【问题讨论】:
【参考方案1】:阅读一些文档后,似乎 operator* 是在 QVector4D 和 QMatrix4x4 之间定义的。所以我改用 QVector4D 得到了类似的东西:
Qt3DCore::QTransform transform;
transform.setRotation(QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), -30));
QVector4D r_to_4D = QVector4D(r, 1.0);
r_to_4D = transform.matrix() * r_to_4D;
QVector3D r_new = r_to_4D.toVector3D().normalized();
显然有更简洁的方式来编写它,但我现在会坚持下去。
【讨论】:
【参考方案2】:由于您只想对 3D 矢量应用旋转,看起来您可以直接使用 QQuaternion::rotatedVector 方法 - https://doc.qt.io/qt-5/qquaternion.html#rotatedVector
QQuaternion R = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45);
QVector3D r_new = R.rotatedVector(r);
【讨论】:
以上是关于如何将 QVector3D 与 QMatrix3x3 相乘?的主要内容,如果未能解决你的问题,请参考以下文章