Понимание Qt& #39;s Функция поворота QTransform

В результате этот вопрос , I' хотелось бы больше узнать о функции Qt QTransform::rotate. В документации сказано:

QTransform & QTransform ::rotate (qreal angle, Qt ::Axis axis = Qt ::ZAxis)

Поворачивает систему координат против часовой стрелки на данный угол относительно указанной оси и возвращает ссылку на матрицу.

Обратите внимание, что если вы примените QTransform к точке, определенной в координатах виджета, направление вращения будет по часовой стрелке, потому что ось y -направлена ​​вниз.

Угол указывается в градусах.

Из моего предыдущего вопроса я узнал, что для поворота QPolygonFпо часовой стрелке я должен фактически повернуть его на 90 градусов против -по часовой стрелке в соответствии с функцией rotate:

QPolygonF original = QPolygonF() << QPoint(0, 1) << QPoint(4, 1) << QPoint(4, 2) << QPoint(0, 2);
QTransform transform = QTransform().translate(2, 2).rotate(90).translate(-2, -2);
QPolygonF rotated = transform.map(original);
qDebug() << rotated;

Выход:

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) ) 

Например. для этого прямоугольника:

original rectangle rotation

Повернуть сюда:

new rectangle rotation

Почему это? Почему в документации говорится, что мой вызов QTransform::rotateна самом деле вызывает вращение по часовой стрелке, когда я считаю, что не нахожусь в «координатах виджета» -здесь нет никаких виджетов.

5
задан JMP 14 August 2017 в 07:51
поделиться