Как сбросить поворот матрицы?

Автор Тема: Как сбросить поворот матрицы?  (Прочитано 5390 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Доброго времени суток, уважаемые форумчане, помогите пожалуйста найти ответ на вопрос:
У меня есть матрица, которая была несколько раз повернута методом Matrix.SetToRotation(). Мне требуется аннулировать эти повороты, и вернуть ее в начальное положение, как это сделать?
П.С. Сразу прошу прощения, помнится мне, что в каком-то топике форума уже обсуждался данный вопрос, но я не смог найти.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как сбросить поворот матрицы?
« Ответ #1 : 22-03-2017, 23:14:36 »
П.С. Сразу прошу прощения, помнится мне, что в каком-то топике форума уже обсуждался данный вопрос, но я не смог найти.
Ну если ты знаешь как ты поворачивал, то нужно произвести обратные преобразования, т.е. Matrix.SetToRotation() но угол с минусом. И так столько раз, сколько ты поворачивал. Причем порядок поворотов должен быть обратный к тому, который ты уже делал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Как сбросить поворот матрицы?
« Ответ #2 : 23-03-2017, 12:03:21 »
Спасибо, Александр. Но я искал способ упростить предложенный вами вариант. Что вроде бы было свойство, которое отвечало за поворот матрицы, и что его можно было как бы "сбросить" на начальное значение.
Причем порядок поворотов должен быть обратный к тому, который ты уже делал.
Почему обратный порядок? Разницы ведь нет никакой, или я чего-то не знаю?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как сбросить поворот матрицы?
« Ответ #3 : 23-03-2017, 12:45:08 »
Если поворот относительно одной оси, то порядок поворотов не важен. Если оси разные - важен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Как сбросить поворот матрицы?
« Ответ #4 : 23-03-2017, 12:58:50 »
порядок поворотов не важен
Да, наверно вы правы, спасибо.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как сбросить поворот матрицы?
« Ответ #5 : 23-03-2017, 13:43:35 »
Может быть до всех поворотов достаточно было запомнить состояние матрицы, а потом её восстановить?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение R.I.Chernov 23-03-2017, 14:00:18

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Как сбросить поворот матрицы?
« Ответ #6 : 23-03-2017, 13:55:14 »
Может быть до всех поворотов достаточно было запомнить состояние матрицы, а потом её восстановить?
Спасибо за совет. Я тут пришел к такому выводу:
Если требуется запомнить какое-то определенное положение матрицы:

Код - C# [Выбрать]
  1. Inventor.Matrix oMatrix_tmp_save = oMatrix.Copy();
  2. // тут идут разные преобразования
  3. oMatrix = oMatrix_tmp_save.Copy() // возвращаем сохраненное значение;

Если же требуется матрицу вернуть в "нулевое положение". т.е., в котором она находится при создании, то проще это сделать так:
Код - C# [Выбрать]
  1. oMatrix = oTG.CreateMatrix(); // возвращаем "нулевое" значение
Ибо эффект тот же, что и если бы мы копировали. но кол-во строчек кода меньше.

Спасибо вам, Александр, за помощь!
В программировании я новичок...но ненадолго! ;)