| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Quaternion - (x, y, z, w)... |
| Автор: mr.DUDA 17.7.2005, 19:24 |
| Ребят, кто-нибудь может объяснить сабж ? Кватернион - это вектор с добавленной четвёртой составляющей, смысл которой - "угол поворота". Введён в качестве замены матрицам 4x4, т.к. по идее полностью содержит все их данные в компактном виде. Во что я не могу "вьехать" - так это в то, какой смысл вкладывается в сочетание (x, y, z, w)... Если задать значения "обычных" координат кватерниона - всё ок. Начинаешь изменять w - и всё плывёт ! Невозможно даже определить законы, по которым x, y и z зависят от w ! В принципе, кватернион очень круто выручает в ситуации, если нужно "плавно перенести точку А в точку В, зная их координаты (x, y, z)". Для этого используется общепринятая ф-ция Slerp (Spherical Linear Interpolation). Но вот в ситуации, когда есть сфера, заданная векторами AxisX, AxisY, AxisZ, и хочется "по-простому" провращать точку от нулевого положения к определённым углам от осей X, Y, Z - тут уже кватернионы становятся поистине китайской грамотой... Пожалуйста, кто-нибудь, кто может - помогите разобраться в трёхмерной арифметике ! Или хотя бы на пальцах объясните, как вычислять трёхмерные преобразования "по простому" ? |
| Автор: Alastis 18.7.2005, 09:12 |
| mr.DUDA насколько я знаю, кватернионы используется в тех случаях, когда необходима интерполяция между различными положения объекта. Это требуется когда необходимо хранить вращение, если использовать углы Эйлера или матрицы, интерполяция будет довольно дорогостоящая. В кватернионе компоненты {x, y, z} - вектор, , лежащий на оси вращения, а длина вектора зависит от угла поворота. w зависит только от величины угла поворота. Насчет зависимости x, y, z от w - она такая: если взять единичный вектор V = {x, y, z} за ось вращения и угол alpha за вращение вокруг этой оси, тогда кватернион представляющий это вращение можно записать как: q = [ V*sin(alpha/2), cos(alpha/2) ] Для понимания того, как хранит вращение кватернион, вспомни про двумерные вращения. Вращение в плоскости можно задать матрицей 2x2, в которой будут записаны косинусы и синусы угла поворота. Можно представить, что кватернион хранит комбинацию оси вращения и матрицы половины поворота вокруг этой оси. Вообще более подробно про кватернионы можно посмотреть http://www.gamedev.ru/articles/?id=30129 и http://www.gamedev.ru/coding/10805.shtml. Собственно оттуда я и освежал свою память |
| Автор: mr.DUDA 18.7.2005, 13:04 |
| Alastis, спасибо ! |