Я ничего не понимаю
Добавлено: 22 авг 2007, 11:30
Вот интересно, проглядывая на работе код, столкнулся с очень странным куском. Принялся копать и обнаружил странные парадоксы, природу которых не понимаю.
Код делает следующее. Есть поворот пространства A. Есть другой поворот пространства B. Код находит их разницу, а потом со все возрастающим весом добавляет эту разницу к A, чтобы в конце получить B.
И вот тут возникает любопытный вопрос. А разница D=(B-A) это что такое? Как он должен работать (плюс означает последовательные повороты, а значок * на самом деле, означает Q*w == slerp(1,Q,w) ):
D1*w(t) + A
или
A + D2*w(t)
Повороты штука некоммутативная, так что результаты будут разные. Так что такое разница - D1 или D2?
Лично я интуитивно предположил, что D2. Потому что мы сначала делаем поворот A, а потом добавляем к нему дельту.
Но на практике получается, что так переход от A к B идет не по кратчайшему пути, а по дуге. А вот D1 делает все верно. Сижу и чешу репу. Ничего понять не могу. Почему это, сначала дельта, а потом поворот верно, а не наоборот?
Мы живем в сумасшедшем мире, друзья мои.
Код делает следующее. Есть поворот пространства A. Есть другой поворот пространства B. Код находит их разницу, а потом со все возрастающим весом добавляет эту разницу к A, чтобы в конце получить B.
И вот тут возникает любопытный вопрос. А разница D=(B-A) это что такое? Как он должен работать (плюс означает последовательные повороты, а значок * на самом деле, означает Q*w == slerp(1,Q,w) ):
D1*w(t) + A
или
A + D2*w(t)
Повороты штука некоммутативная, так что результаты будут разные. Так что такое разница - D1 или D2?
Лично я интуитивно предположил, что D2. Потому что мы сначала делаем поворот A, а потом добавляем к нему дельту.
Но на практике получается, что так переход от A к B идет не по кратчайшему пути, а по дуге. А вот D1 делает все верно. Сижу и чешу репу. Ничего понять не могу. Почему это, сначала дельта, а потом поворот верно, а не наоборот?
Мы живем в сумасшедшем мире, друзья мои.