Это как вращение вокруг точки? - PullRequest
0 голосов
/ 14 июля 2010

Допустим, у меня есть многоугольник с точками:

(0,0)
(100,0)
(100,100)
(0,100)

Позволяет также установить его центр (50,50).

Чтобы повернуть его, я бы добавил 50 к каждому компонентукаждую точку, затем выполните

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

Затем вычтите 50 из каждого компонента каждой точки?

Спасибо

Ответы [ 4 ]

4 голосов
/ 14 июля 2010

Это верно, за исключением того, что в начале вам нужно вычесть 50, чтобы вернуть центр многоугольника к 0, а затем в конце добавить 50, чтобы вернуть многоугольник в исходное положение.

На самом деле здесь используется матрица вращения в 2D:

alt text

3 голосов
/ 14 июля 2010

Сначала необходимо перевести (50, 50) в начало координат, выполнить вращение, а затем перевести начало координат обратно в (50, 50).

В частности, с учетом матриц A, B, гдеA переводит центр вращения в начало координат и обычно принимает вид:

|1  0  S<sub>x</sub>|
A = |0  1  S<sub>y</sub>|
    |0  0  1 |

И B - ваша матрица вращения:

|cos &theta; -sin &theta; 0|
B = |sin &theta;  cos &theta; 0|
    | 0      0    1|

Тогда точное вычисление, необходимое для вектора p= <p<sub>x</sub> p<sub>y</sub> 1>, повернутый вокруг точки (S x , S y ) на угол θ, заданный как p' = ABA<sup>-1</sup>p<sup>T</sup>.Дополнительное измерение необходимо в матрицах A и B и в векторе p, чтобы учесть тот факт, что, поскольку умножение матриц является просто линейным преобразованием, оно приводит к тому, что начало координат всегда отображается на начало координат.Это означает, что мы не можем сделать перевод;хитрость заключается в том, чтобы добавить дополнительное измерение и убедиться, что все преобразования находятся на векторах от начала координат.

Как предполагает Джейсон С., дополнительную информацию можно найти в записи Википедии о Аффинные преобразования или Запись Вольфрама на ту же тему.

1 голос
/ 14 июля 2010

Вы должны вычесть 50 из каждого компонента (это делает (50,50) центром), выполнить вращение, а затем добавить 50 к каждому компоненту.

0 голосов
/ 14 июля 2010

Если вы хотите вращаться вокруг точки (назовите ее центром), вам необходимо выполнить следующие преобразования:

  1. Перевести точки из мировых позиций в относительные позиции в центре.
  2. Поворот позиций вокруг начала координат.
  3. Перевод точек из центральных относительных точек в мировые позиции.
...