Как я могу изменить размер повернутого прямоугольника с соотношением сторон? - PullRequest
1 голос
/ 14 ноября 2011

У меня есть массив точек

PArr [0..3]

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

Я искал в Интернете, но не нашел алгоритм, который хорошо работает для повернутых прямоугольников. Относительно того, что я изменяю его размер в действии Mouse Move.

Как я могу изменить размеры точек, сохраняя соотношение сторон сторон прямоугольника, я знаю, что это проблема векторов, но я немного запутался в этом?

1 Ответ

2 голосов
/ 14 ноября 2011

Использовать матрицы преобразования.Они обеспечивают четкие множественные преобразования.

http://en.wikipedia.org/wiki/Transformation_matrix

В вашем случае вам нужно 4 матрицы:

  1. Перевод (-sizeX/2, -sizeY/2) - для обработки дальнейших преобразованийвокруг центра прямоугольника

  2. Поворот на заданный угол

  3. Масштабирование по указанному коэффициенту (соотношение сторон прямоугольника будет сохранено!)

  4. Перевод (sizeX/2, sizeY/2) - для возврата первого позиционирования

Умножьте эти 4 матрицы и примените результат к точкам прямоугольника.Да, и ваш прямоугольник должен иметь свое начало в (0, 0), чтобы применить матрицу.Если начало вашего прямоугольника имеет координаты (x0, y0), используйте

(-x0 - sizeX/2, -y0 - sizeY/2) для первой матрицы

и (x0 + sizeX/2, y0 + sizeY/2) для четвертой матрицы

...