Алгоритм вращения точки вместе с рамкой (относительно) - PullRequest
0 голосов
/ 18 января 2011

У нас есть приложение, в котором мы создаем этикетку, а затем создаем изображение из дизайна, которое отправляется на принтер. Изображение передается по байтовому потоку перед отправкой по TCP / IP.

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

Мне было интересно, есть ли простой способ вычислить положение элемента относительно высоты / ширины вмещающего прямоугольника (размер метки). Также необходимо учитывать, что это растровое изображение, поэтому верхний левый угол равен (0,0). Это то, что смущает меня, потому что большинство алгоритмов вращения, которые я нашел, работает на правильной оси X / Y.

Итак, скажем, у меня есть метка 500 x 300 (ширина x высота) с точкой (текстовое поле) на 100 100 (верхний левый). Я хочу повернуть эти 90 градусов, чтобы метка теперь была 300 x 500, а текстовое поле - 200 x 100 (верхний правый угол). Обратите внимание, вычисление прямоугольника само по себе само по себе, мне просто нужно найти точку относительно новых сторон.

Я нашел 180 градусов (ширина - x, высота - y), но с трудом определяю алгоритм на 90 (и 270)

Вероятно, здесь не было никакой ракетной операции, но я ослепил себя этой проблемой.

Ответы [ 2 ]

1 голос
/ 18 января 2011

Простое наблюдение может показать, что для вращения по часовой стрелке pi / 2 формула равна (hight - y, x). Вы можете прийти к нему из общей формулы вращения pi / 2, (-y, x). (Если учесть, что «происхождение координат» тоже меняется)

Получение формулы на 270 градусов очень похоже.

0 голосов
/ 18 января 2011

Если вы хотите повернуть метку против часовой стрелки на 90 градусов, то каждая точка (x, y) метки «сопоставляется» с (-y, x).В случае поворота на 270 градусов (или на 90 градусов по часовой стрелке, что тоже самое) (x, y) становится (y, -x).Надеюсь, это поможет.

...