首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将QVector3D与QMatrix3x3相乘?

如何将QVector3D与QMatrix3x3相乘?
EN

Stack Overflow用户
提问于 2020-11-08 02:28:44
回答 2查看 417关注 0票数 0

这个问题听起来绝对微不足道,但这行代码不会运行,因为没有为QVector3D和QMatrix定义运算符*。我看过医生了,它好像不在那里。有什么方法可以做到这一点吗?如果没有,有没有具体的原因?

代码语言:javascript
复制
QVector3D r_new = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45).toRotationMatrix() * r;
EN

回答 2

Stack Overflow用户

发布于 2020-11-08 06:29:53

阅读一些文档后,运算符*似乎是在QVector4D和QMatrix4x4之间定义的。所以我改用了QVector4D,得到了类似这样的结果:

代码语言:javascript
复制
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();

显然有更传统的方式来编写它,但我现在将坚持使用它。

票数 1
EN

Stack Overflow用户

发布于 2021-01-21 17:21:29

由于您只想将旋转应用于3D矢量,因此看起来您可以直接使用QQuaternion::rotatedVector方法- https://doc.qt.io/qt-5/qquaternion.html#rotatedVector执行此操作

代码语言:javascript
复制
QQuaternion R = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45);
QVector3D r_new = R.rotatedVector(r);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64731057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档