QVector2D - 旋转
Posted
技术标签:
【中文标题】QVector2D - 旋转【英文标题】:QVector2D - rotation 【发布时间】:2016-10-07 07:56:13 【问题描述】:我正在从 Python 3 移植我的代码(使用我自己的矢量、多边形、线段等类,包括与交叉和点积、范数、交点、多边形检查等相关的各种操作) 到 Qt 5.7。
在 Python 中,为了更好地理解,我手动完成了所有数学运算。现在我将我的算法移植到 Qt C++ 中,我希望 Qt 至少提供基本的东西(除了交叉和点积之外),当涉及到矢量时,例如旋转矢量的能力,翻译它等。从我所看到的东西缺乏......很多。
QMatrix4x4
似乎已被弃用(我只能在 Qt 4.8 的文档中找到一些东西)。我在轮换中发现的唯一东西是QTransform::rotate(...)。但是,这是用于旋转坐标系。虽然在数学上我可以使我的算法适应这种做事方式,但我仍然更愿意遵循围绕任意点旋转的约定,即平移到原点,旋转最后反转翻译。
我是否遗漏了什么或者这真的不适用于QVector2D
(我还检查了QVector3D
,因为可以轻松地将 2D 转换为 3D 向量(顺便说一句,如果您想使用该函数进行叉积,这是必要的) :D))?
注意:这里不能选择使用 QML。一切都只需要 C++。
【问题讨论】:
“旋转矢量”?你想从列专业转到行专业吗? 你在哪里看到QMatrix4x4
被弃用了?
@wasthishelpful 该死的 Qt 文档...非常感谢您指出这一点。顺便说一句,您可以将此作为答案发布。
@xaxxon 不是QVector
,而是QVector2D
,这是一个二维向量(从数学上讲)。 @wasthishelpful 已经找到了解决方案。我只是错过了 Qt 文档中的QMatrix4x4
。 拍自己的脸
啊,等等。 QMatrix4x4::rotate(...)
使用另一个矩阵(由传递的角度定义为该函数的参数)围绕向量旋转矩阵。它不旋转矢量。 XD
【参考方案1】:
在几何方面,Qt 库中似乎存在大量重复。对于这种情况,可以使用QTransform
和QPointF
:
QPointF pivot = ...;
float rotationInDegrees = ...;
QTransform rotationAroundPivot = QTransform()
.translate(-pivot.x(), -pivot.y());
.rotate(rotationInDegrees);
.translate(pivot.x(), pivot.y());
QPointF rotatedPoint = rotationAroundPivot.map(point);
【讨论】:
以上是关于QVector2D - 旋转的主要内容,如果未能解决你的问题,请参考以下文章
“QVector<QVector<QVector<T>>> 向量”是啥意思?