Кватернионы в анизотропном пространстве, дополнение

Nov 14, 2022 01:29

Продолжение этого.
Пожалуй, для моих задач наиболее удачной была бы следующая формулировка:










При этом нормой кватерниона будем считать



И тогда поворот вектора при помощи кватерниона сведётся к следующей матрице поворота:


Меня несколько сбило с толку, что отличие от оригинальной матрицы поворота - всегда в сторону уменьшения коэффициентов!
Да и при умножении кватернионов то же самое: мы считаем, что все значения от -1 до +1, но при этом никогда не появляется сдвигов влево (умножений на 2), исключительно сдвиги вправо!

Это казалось неверным. Ведь если мы производим вращения в пространстве, где оси имеют разный масштаб, то, грубо говоря, первый поворот, переводящий Y в X, должен будет уменьшить значение вдвое, зато обратный к нему - напротив, увеличить вдвое! Кажется, что "умножалка на 2" где-то должна сидеть!

В конце концов, когда мы посмотрели, как преобразуется матрица поворота от изменения масштаба оси, там отчётливо появлялись коэффициенты 2 в одном месте и 1/2 в другом.

Тем не менее, похоже всё сходится...


Первая хитрость в том, что мы ограничили "силу" тех кватернионов, которые ведут к существенному возрастанию координат!

К примеру, у нас был вектор (1;0;0), при том ось X имеет вдвое бОльшую цену деления, чем все остальные, т.е 1 по оси X - это строго 1 метр, а такая же 1 по оси Y - это 0,5 метра.

При этом подобный масштаб справедлив и для кватернионов. Кватернион i, т.е соотв. вектору (0;1;0;0) соответствует вращению вокруг оси X на 180 градусов, а кватернион j, или (0;0;1;0) - вообще не является кватернионом вращения, поскольку его норма равна всего лишь 1/2...

Собственно, самый крупный кватернион вращения вокруг оси Y, который мы можем записать, используя значения от -1 до +1 - это



Его норма (по формуле, данной выше) равна единице!

И выражает этот кватернион поворот на угол 60° вокруг оси Y, что даёт матрицу поворота:



И если этот поворот применить к вектору (1;0;0), получится первый столбец этой матрицы, со значением Z больше единицы по абсолютной величине.

Ранее у нас выполнялось соотношение, что векторы длиной 1, поворачиваемые с помощью кватернионов с единичной нормой, сохраняют свою длину, и если все коэффициенты принимают значения от -1 до +1, то вектор длины 1 заведомо может быть записан!

Но здесь у нас и длина вектора, и норма кватерниона приобретают коэффициент 1/4 для осей Y,Z. Для них всё это остаётся в силе, длина остаётся неизменной, как это и положено при повороте.

Вот только гарантий насчёт того, что вектора влезут в те значения -1..+1, которые выделены им в компьютере - уже нет. Ведь если просто найти корень из суммы квадратов компонентов нашего кватерниона, это получится не 1, а вовсе даже 1,32. А вектор во время поворота кватернионом может возрасти на КВАДРАТ НОРМЫ, т.е и вовсе 1+3/4 = 1,75. И в тех компонентах матрицы, которые никак не поменялись по сравнению с оригинальной, так и вышло... Вот у нас корень из 3 выскочил, который 1,73. Это вторая хитрость.

Что-то в этом есть... Хотя пока не буду торопиться с применением, оставлю это в качестве задела на будущее. Пока по результатам моделирования выходило, что ошибки вычислений составляют около 5% от общей ошибки прибора, который я разрабатываю, главные вклады в которую - "шумы" фотоприёмной матрицы и ошибки в геометрии мишени, по которой мы работаем. Так что рваться устранять эти 5% (тем более, что полностью их этим методом вряд ли удастся устранить, скорее, оторвать 10..20% от этих 5%) пока преждевременно...

Но пока эта идея кружилась в голове, я просто обязан был её изложить на бумаге и в уютном бложеке, чтобы голова освободилась под более полезные на данный момент вещи.

кватернионы-это просто (том 1), странные девайсы, работа

Previous post Next post
Up