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 库中似乎存在大量重复。对于这种情况,可以使用QTransformQPointF

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 - 旋转的主要内容,如果未能解决你的问题,请参考以下文章

Opengl模型矩阵在旋转一圈后不绕原点旋转

围绕特定轴动画qt3d旋转

“QVector<QVector<QVector<T>>> 向量”是啥意思?

如何从 QVector<QVector<T>> 获取 QVector<T>?

qvector倒序插入

修改作为指针传递的 QVector 的 QVector