Повернуть объект вокруг определенной точки, даже если исходный круг отличается? - PullRequest
0 голосов
/ 18 февраля 2019

Как можно повернуть объект (скажем, его позиции находятся в точке (5, 5, 0)) с точкой поворота, скажем, в точке (3, 4, 0), даже если исходная точка вращения равна (0, 0, 0)?

Вот графическое объяснение:

explain

Я хочу повернуть объект относительнок пользовательской точке поворота.Объект сделан в блендере таким образом, что объект находится далеко от начала координат (в точке (5, 5, 0)).

Как мы можем использовать матрицы для решения этой проблемы?

1 Ответ

0 голосов
/ 18 февраля 2019

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

В данном примере эти матрицы будут:

1.translation by (-3,-4,0):
    [ 1, 0, 0,-3,
      0, 1, 0,-4,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

2. rotation (in this example by 90 degrees)
    [ 0, 1, 0, 0,
     -1, 0, 0, 0,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

3. translation by (3,4,0)
    [ 1, 0, 0, 3,
      0, 1, 0, 4,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

Это приведет к следующей матрице какокончательное преобразование:

    [ 0, 1, 0,-1,
     -1, 0, 0, 7,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...