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);