Повернуть прямоугольник на экране - PullRequest
1 голос
/ 18 февраля 2012

Я использую GDI +, чтобы попытаться нарисовать прямоугольник на экране и повернуть его на 45 градусов.
Вот код, который я использую

Pen RedPen(Color(255, 255, 0, 0), 4);

HDC screenDC = GetDC(NULL);
Graphics graphics(screenDC);

graphics.RotateTransform(45);
graphics.DrawRectangle(&RedPen, 150, 150, 50, 50);

Прямоугольник вращается, но его положение перемещается по кругу, чем больше он вращается.
Я уверен, что это потому, что я вращаю центр экрана, а не центр прямоугольника?
Так как мне повернуть его вокруг центра прямоугольника?

1 Ответ

1 голос
/ 18 февраля 2012

Проблема в том, что он не вращается вокруг центра прямоугольника, как вы заметили. Поэтому вам нужно перевести объект после его поворота.

        e->Graphics->RotateTransform(degrees);
        e->Graphics->TranslateTransform(posX, posY, MatrixOrder::Append);
        e->Graphics->DrawRectangle(gcnew Pen( Color::Blue,3.0f ),  -width / 2, -height / 2, width, height);

градусов - это величина, которую вы хотите повернуть в своем прямоугольнике. posX и posY - это позиция, где вы хотите нарисовать его на экране.

Также вам необходимо убедиться, что вы передали MatrixOrder :: Append, иначе порядок трансформации может быть изменен, и это повлечет за собой преобразование перед поворотом (что даст вам эффект, аналогичный тому, что вы видите)

...