Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: QCasper от Ноябрь 18, 2005, 14:11



Название: Поворот относительно заданной точки
Отправлено: QCasper от Ноябрь 18, 2005, 14:11
Есть QRect(0,0,240,240), например. Нужно повернуть его относительно центра на n градусов. Как? Если сделать так:

painter.rotate(n);
painter.drawRect(rt);

то поворачивается как известно вокруг (0,0)


Название: Поворот относительно заданной точки
Отправлено: burunduk от Ноябрь 18, 2005, 15:57
1. сохранить матрицу преобразований
2. преобразовать нужным образом координаты
3. восстановить матрицу преобразований


Название: Поворот относительно заданной точки
Отправлено: QCasper от Ноябрь 18, 2005, 18:02
Будьте любезны, для конкретного примера, который я привел, - кодом


Название: Поворот относительно заданной точки
Отправлено: burunduk от Ноябрь 18, 2005, 18:42
извиняюсь
да, действительно не получается :-(


Название: Поворот относительно заданной точки
Отправлено: QCasper от Ноябрь 18, 2005, 19:00
вот, вот :(


Название: Поворот относительно заданной точки
Отправлено: Sergeich от Ноябрь 21, 2005, 17:13
А че painter.translate() не вставил?


Название: Поворот относительно заданной точки
Отправлено: burunduk от Ноябрь 21, 2005, 17:56
код, пожалуйста, в студию


Название: Поворот относительно заданной точки
Отправлено: Sergeich от Ноябрь 21, 2005, 18:30
Код:

painter.rotate(n);
painter.translate( rt.center().x(), rt.center.y() );
painter.drawRect(rt);


Название: Поворот относительно заданной точки
Отправлено: QCasper от Ноябрь 21, 2005, 23:24
Цитата: "Sergeich"
Код:

painter.rotate(n);
painter.translate( rt.center().x(), rt.center.y() );
painter.drawRect(rt);


И че, работает?


Название: Поворот относительно заданной точки
Отправлено: comrade от Ноябрь 23, 2005, 15:54
попробуй воттак:
Код:

QRect rt(200,100,140,200);
QPoint c = QPoint( rt.center().x(), rt.center().y() );
double angle = 15.0;

QWMatrix wm1;
wm1.translate( -c.x(), -c.y() );
QWMatrix wm2;
wm2.rotate( angle );
QWMatrix wm3;
wm3.translate( c.x(), c.y() );
painter.setWorldMatrix( wm1 * wm2 * wm3 );

painter.drawRect( rt );

повернётся вокруг центра прямоугольника rt