Re: А почему-бы не использовать скалярное произведение?nabbla1November 18 2018, 13:13:07 UTC
Всё верно. Можно ещё ввести функцию LengthSquared (квадрат длины), она чуть быстрее скалярного произведения, поскольку аргументов меньше.
Не стал здесь рассуждать о скорости вычислений, поскольку не думал эту метрику саму в вычисления запихивать, она мне была нужна для анализа достигаемой точности. (Разве что она вычисляется у меня на персональном компьютере после моделирования разных алгоритмов, чтобы сравнить их. Но далеко не внутри долгого цикла, скорее уже в конце работы)
И приближенное значение метрики - не для ускорения, а чтобы продемонстрировать: на малых масштабах это эвклидова метрика, все четыре компоненты оказывают одинаковый вклад в точность представления поворота.
А чем не нравится традиционная метрика - расстояние ρ(q,r) между кватернионами q и r равно меньшей дуге большого круга на трёхмерной сфере a2+x2+y2+z2=1, проходящей через эти кватернионы (в такой нормировке максимальное расстояние будет равно π)?
Расстояние между _поворотами_, соответствующими кватернионам (q и -q) и (r и -r) - минимальная дуга большого круга, проходящего через эти 4 точки. Это min(ρ(q,r), π-ρ(q,r)).
Вроде бы естественным образом возникает сферическая геометрия на трёхмерной сфере, и никаких псевдометрик.
Этот ликбез - о применении кватернионов для решения задач, связанных с вращением твёрдого тела, ориентацией в пространстве и пр. Свойства самих кватернионов - лишь в той мере, в какой они нужны для этих задач.
Поэтому отталкиваюсь именно от поворотов, ввожу "практичную" метрику, которой можно характеризовать, насколько правильно работают "приближённые методы". И так удачно выходит, что эта метрика выражается строгой формулой через кватернионы, и по ней сразу видно, что представить кватернионы числами с фиксированной запятой, т.е отрезок [-1;1] разбить на равные интервалы - очень неплохая идея! (представление с плавающей точкой позволяет ОТДЕЛЬНЫЕ повороты изобразить очень точно, скажем, вблизи нулевого, но для многих других точность становится ниже, т.к биты, которые могли уйти в мантиссу, заняты экспонентой)
Сразу получается оценить точность такого представления при заданном числе бит.
А с длинами дуги нужно сначала выводить формулы, как из компонентов кватернионов их посчитать, а потом ещё "привязывать" к поворотам.
Comments 6
Reply
Примерно так:
вектор покоординатной разности D = M - L
квадрат его нормы p = (D, D)
расстояние dist(M,L) = 2 SQRT ( p - p p / 4) = SQRT (4 p - p p)
А если dist будет использоваться для сравнения с константами, то можно оставить только (4 p - p p ) и обойтись совсем простой арифметикой.
И еще. Последнее приближение d ~= 2 | M-L | может сильно подвести, если нарвемся на пару вроде (1) и (-1). Как такой случай избежать?
Reply
Не стал здесь рассуждать о скорости вычислений, поскольку не думал эту метрику саму в вычисления запихивать, она мне была нужна для анализа достигаемой точности. (Разве что она вычисляется у меня на персональном компьютере после моделирования разных алгоритмов, чтобы сравнить их. Но далеко не внутри долгого цикла, скорее уже в конце работы)
И приближенное значение метрики - не для ускорения, а чтобы продемонстрировать: на малых масштабах это эвклидова метрика, все четыре компоненты оказывают одинаковый вклад в точность представления поворота.
Reply
Reply
Расстояние между _поворотами_, соответствующими кватернионам (q и -q) и (r и -r) - минимальная дуга большого круга, проходящего через эти 4 точки. Это min(ρ(q,r), π-ρ(q,r)).
Вроде бы естественным образом возникает сферическая геометрия на трёхмерной сфере, и никаких псевдометрик.
Reply
Поэтому отталкиваюсь именно от поворотов, ввожу "практичную" метрику, которой можно характеризовать, насколько правильно работают "приближённые методы". И так удачно выходит, что эта метрика выражается строгой формулой через кватернионы, и по ней сразу видно, что представить кватернионы числами с фиксированной запятой, т.е отрезок [-1;1] разбить на равные интервалы - очень неплохая идея! (представление с плавающей точкой позволяет ОТДЕЛЬНЫЕ повороты изобразить очень точно, скажем, вблизи нулевого, но для многих других точность становится ниже, т.к биты, которые могли уйти в мантиссу, заняты экспонентой)
Сразу получается оценить точность такого представления при заданном числе бит.
А с длинами дуги нужно сначала выводить формулы, как из компонентов кватернионов их посчитать, а потом ещё "привязывать" к поворотам.
Reply
Leave a comment