Перевод координат прямоугольника - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть два приложения, одно из которых создает прямоугольник, и выводит его слева, сверху, ширине, высоте и углу поворота, а другое рисует прямоугольник на экране.

Приложение1 (модуль записи) используетвверху слева как источник для вращения.

Приложение2 (читатель) использует центр в качестве источника для вращения.

Я пытаюсь получить deltaX и deltaY, чтобы я мог нарисоватьпрямоугольник, поверните его вокруг начала координат и используйте встроенный метод перевода, чтобы переместить прямоугольник в положение.

Я знаю, что поворот точек можно рассчитать следующим образом:

x' = x*cos(theta) - y*sin(theta) y' = x+sin(theta) + y*cos(theta)

Но при этом я не могу определить фактические значения дельты, необходимые для метода перевода.

На изображении ниже белый прямоугольник нарисован с использованиемверхняя / левая точка поворота, а зеленый прямоугольник рисуется с использованием центра в качестве точки поворота.Я хотел бы переместить зеленый прямоугольник на белый.

(0,0)

image

1 Ответ

3 голосов
/ 08 февраля 2011

Вы должны перевести:

(Tx, Ty) = (-w / 2 (1-cos theta) - h / 2 sin theta), -h / 2 (1-cos theta) - w / 2 sin theta) http://tinyurl.com/6daesbm

Развитие:

  • В приложении 1 верхняя левая вершина прямоугольника должна быть (x1, y1).

  • Поскольку приложение 1 вращает прямоугольники вокруг верхней левой вершины, их повернутое положение совпадает: (x1',y1') = (x1,y1)

  • Приложение 2 использует координаты центра, которые относятся к вершинелевая точка в приложении 1 выглядит следующим образом: (xc2,yc2) = (x1,y1) + (w/2,h/2)

  • Чтобы вычислить повернутую верхнюю левую вершину в приложении 2, мы применяем матрицу вращения R : (x2',y2') = (xc2,yc2) - R (w/2,h/2)

  • Таким образом, вектор перевода T равен (подставляя вышеприведенные уравнения): enter image description here

...