Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Lisev от Июнь 19, 2008, 22:27



Название: определение угла поворота матрицы
Отправлено: Lisev от Июнь 19, 2008, 22:27
есть обьект класса QWmatrix, матрица трансформации с повернутым изображением, каким образом можно опредилить угол поворота изображения на ней чтобы потом востановить в исходное состояние изображение (чтобы изобрвжение оказалось по д тем углом под  каким его загружали из файла)? в данном класе не нашел не чего чтобы моглобы быть похоже на ето(((

и еще небольшой вопрос, если я меняю матрицу сначало масштаб, потом shear, а потом scale применяю к ней, то есть разница в какой последовательности проводить обратные манипуляции чтобы получилась исходная?


Название: Re: определение угла поворота матрицы
Отправлено: BaltikS от Февраль 27, 2009, 19:46
Такая задача мне тоже сегодня потребовалась. Qt - не даёт на сей счёт ни какой инфы, rotate() - пожалуйста, а вернуть установленный угол увы... Пришлось вспоминать матрицы и изучать матрицу поворота. За трансформацию в Qt отвечает класс QTransform. У него есть метод isRotating(), который возвращает есть поворот или нет.
При 0 градусов - возвращает FALSE (естественно, ничего не повёрнуто), при других углах (от 0 до 359) - TRUE - тоже верно! Но почему при 180 градусов возвращает FALSE. Имхо баг....
Ну и может кому потребуется функция угла поворота в градусах вот её быстро набросал....
Код
C++ (Qt)
#include <math.h>
 
qreal rotateAngle( QTransform & tr)
{
double pi = 3.141592653;
 
qreal angle = (atan(tr.m21()/tr.m11())*180/pi);
if (tr.m21() > 0 && tr.m11() < 0) angle+=180;
if (tr.m21() < 0 && tr.m11() < 0) angle+=180;
return angle;
}