QVector2D - вращение

Я портирую свой код из Python 3 (используя мои собственные классы для векторов, многоугольников, отрезков и т. Д., Включая различные операции, связанные с такими, как произведение перекрестных и точечных, норма, пересечение, проверка точек в многоугольнике и т. Д.) На Qt 5,7.

В Python я сделал всю математику вручную для лучшего понимания. Теперь, когда я портирую свой алгоритм на Qt C++, я надеялся, что Qt предлагает, по крайней мере, базовые вещи (помимо перекрестного и точечного произведения), когда речь идет о векторах, таких как способность вращать вектор, переводить его и т. Д. то, что я вижу, чего-то не хватает... Многое.

Здесь QMatrix4x4 что кажется устаревшим (мне удалось найти что-то в документации только для Qt 4.8). Единственное, что я нашел при вращении, это QTransform:: rotate (...). Однако это для вращения системы координат. Хотя математически я могу адаптировать свой алгоритм к такому способу действий, я все же предпочел бы сделать это в соответствии с соглашением о вращении вокруг произвольной точки, которая переводится в начало координат, вращается и в конце инвертирует перевод.

Я что-то упустил или это действительно не доступно для QVector2D (Я также проверил QVector3D поскольку можно легко преобразовать двухмерный вектор в трехмерный (кстати, что необходимо, если вы хотите использовать функцию для перекрестного произведения:D))?

ПРИМЕЧАНИЕ. Использование QML здесь не вариант. Все должно быть только на C++.

0 ответов

Когда дело касается геометрии, кажется, что в библиотеках 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);
Другие вопросы по тегам