Вращающиеся координаты смещения - PullRequest
1 голос
/ 02 ноября 2011

У меня есть участок карты, который я могу повернуть, после поворота координат я сместил их, чтобы верхняя левая координата была (0,0).Это прекрасно работает, и я могу добавить дополнительные наложения на карту, выполнив ту же комбинацию смещения вращения.

rotate(x) -> offset1

Проблема в том, что если я пытаюсь выполнить второй поворот, то есть

rotate(x) -> offset1 -> rotate(y) -> offset2

Можно ли объединить два поворота и смещения в одну комбинацию смещений поворота и получить то же самое?результат?

rotate(x+y) -> offset3

, где offset3 = offset1 + offset2

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

Помимо полного удаления предыдущего поворота / смещения перед выполнением новых операций, т.е. НЕ

 -offset1 -> rotate(-x) - > rotate(y) -> offset2

Спасибо, Бен

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Вы хотите матрицы преобразования .Используйте эту матрицу, чтобы применить перевод (tx, ty) для 2D-вектора (x, y):

translation

И эту матрицу для вращения на тета:

enter image description here

Несколько переводов и поворотов можно объединить, просто умножив матрицы.(Порядок важен.)

0 голосов
/ 02 ноября 2011

Вы можете использовать матричный перевод, выполнять смещения, повороты и масштабирование.Вы можете объединить их, умножив матрицы вместе.

...