Матрица вращения с центром - PullRequest
3 голосов
/ 22 февраля 2012

Как рассчитывается вектор центра в этом или любом другом примере. WolframAlpha: http://www.wolframalpha.com/input/?i=rotate+90+degrees+center+%283%2C0%29

Ответы [ 2 ]

11 голосов
/ 22 февраля 2012

Гомогенные координаты:

            [ cos(theta) -sin(theta) 0 ]
Rotate    = [ sin(theta)  cos(theta) 0 ]
            [      0           0     1 ]

            [ 1 0 x ]
Translate = [ 0 1 y ]
            [ 0 0 1 ]

Таким образом, чтобы выполнить преобразование, вы умножаете Translate(x, y) * Rotate(theta) * Translate(-x, -y) и получаете матрицу преобразования.

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

Или в одной функции

Vector RotateAbout(Vector node, Vector center, double angle)
{
    return new Vector(
        center.X + (node.X-center.X)*COS(angle) - (node.Y-center.Y)*SIN(angle),
        center.Y + (node.X-center.X)*SIN(angle) + (node.Y-center.Y)*COS(angle)
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...