Как стать автором
Обновить

Комментарии 54

И вот это всё мистеру Гамильтону пришло в голову когда он проходил под мостом???
Здесь пропущена предыстория, с которой можно ознакомиться в других источниках, например.
Менделеев к этой увлекательной истории во сне периодической таблице химических элементов относился с плохо скрываемой иронией. О своей таблице он говорил: «Я над ней, может быть, двадцать лет думал, а вы думаете: сидел и вдруг… готово».
Как я понял, Менделеев про подобный сон вообще говорил один раз в жизни, через много лет после открытия периодического закона, в разговоре с Иностранцевым. Собственно Иностранцев и записал. Причём, из контекста скорее можно подумать, что сперва он закон открыл и таблицу нарисовал, а потом она ему снилась.
Ещё интересное видео про кватернионы и зачем они вообще понадобились, также упомнинание про октонианы:
Заголовок спойлера


Как-то для студенческих нужд написал библиотеку. Недавно переписал её на Kotlin. Может кому пригодится?
Для C# реализация кватернионов есть в XNA, я её оттуда когда-то давно выковыривал. Она более полная.
Я больше писал её для матриц и было это в 2006 вроде. Потом вспомнил, сдул пыль и выложил на Github. Ни на какие лавры не претендую.

Кстати, в книге "3D Math Primer for Graphics and Game Development" (она приведена в конце статьи) очень хорошо объяснены кватернионы и приведена их реализация на C++. Имхо, намного подробнее и понятнее, чем в статье выше. Я когда читал книгу, потихоньку написал свою велосипедную реализацию на java.

Если вас заинтересует можете поучаствовать в этом проекте: github.com/altavir/kmath

Мне сначала свой Android проект до beta довести, а там — вполне может быть. Спасибо за предложение!

>3, если они нормализованы. Вещественную часть можно вычислять во время выполнения программы

Это корректно только если повороты на угол менее 180 градусов.

p.s. В свое время разбирался шо такое кватернионы по «Кинематика и динамика твердого тела (кватернионное изложение), pdf легко гуглится.
И не менее ужасны пробелы между строками.
Вот хорошее введение (скоро обещают продолжение)
Как-то неадекватно выглядит эта анимация даже в дефолтном состоянии настроек. Это особенно заметно, когда ставишь галочку «трассировки».
Математики не могли смириться с тем, что выражение не имеет решения, поэтому было изобретено новое понятие

Курсеровский курс по комплексным с вами не согласен. Там прямо отдельно было сказано, что квадратные уравнения — фигня. И так понятно, что корней нету. А вот когда при решении кубического (у которого корень есть всегда) на промежуточной стадии получаешь корень из отрицательного — вот тогда грустно. Корень то нужен. Поэтому, пришлось изобретать теорию.
Вычисление обратной величины матрицы поворота значительно медленнее, если матрица не ортонормирована (если она ортонормирована, то это всего лишь транспонирование матрицы).

Матрица поворота всегда ортонормирована. Если она не ортонормирована то это плохая матрица поворота которую долго-долго умножали и округляли пока она не перестала быть чистым поворотом :).
Я бы упомянул в статье связь кватернионов с более простой и понятной конструкцией — вектором вращения. Любое вращение в 3D есть вращение на какой-то угол (a) вокруг оси заданное единичным вектором (v). Так вот соответствующий этому вращению кватернион есть
$$ cos(a/2) + sin(a/2) * (i*v.x +j*v.y + k*v.z)$$
То бишь мнимая часть кватерниона — это вектор оси вращения, домноженный на sin(a/2) а угол поворота определяется действительной частью кватерниона.
Поскольку в комментариях TeX не поддерживается то \cdot был бы менее читабелен :)

i — это не вектор направления, это вектор поворота на 90º. Корень из i — это i ^ 1/2, половина угла, поворот на 45º. Потому и есть связь между тригонометрическими функциями и экспонентой в комплексной степени.

Аналогия с комплексными числами здесь только сбивает с толку на самом деле. К примеру в комплексных числах (i) и (-i) — это два разных поворота сохраняющих условную «ось z» а в кватернионах это один и тот же поворот сохраняющий ось x. Потому как кватернионы к векторам не умножением применяются (в отличие от 2D случая с комплексными числами)
Не пытайтесь понять это допущение, потому что логичных причин его существования нет. Нам просто нужно принять, что i — это просто некая величина, квадрат которой равен -1

Вот кстати логичная причина существования: поворачиваем положительный единичный вектор 2 раза на 90 градусов.

Вектор вращения — это описание оператора вращения? Если да, то к чему и как применяется?

И еще. Я правильно понимаю, что начало определенного таким образом вектора всегда совпадает с началом координат? То есть если надо описать вращение относительно параллельного вектора, то надо еще указать дополнительно координаты точки начала вектора? Или как?
Вектор вращения — это единичный вектор сонаправленный оси вращения умноженный на угол вращения (скаляр). Т.е. направление вектора задает ось вращения а длина вектора — поворот. Но не суть важно, там их несколько родственных вариантов, объединенных идеей задания вращения чере «ось и угол» (axis and angle). Он интуитивен и подобно кватернионам удобен для интерполяции вращений, только там формулы чуть сложнее и медленнее и потому применяются реже. Можете почитать про «формулу вращения Родригеса» для примера. В основном это очень классная вещь для параметризации возможных матриц вращений если требуется решать какую-нибудь задачку на поиск оптимального поворота.

В обсуждаемой статье идет речь о задании «чистых» вращений (линейных операторов), которые по определению вращают исключительно относительно начала координат. Для задания евклидовых движений в 3D (повороты относительно произвольной оси как частный случай и винты как общий) одних кватернионов недостаточно, у них 6 степеней свободы (у вращений вокруг произвольной оси — пять). Там есть схожий формализм с векторами вращения, только надо 2 трехмерных вектора задавать а не один.
спасибо
Сейчас пишу программу для интерактивных геометрических построений, причём геометрия не евклидова, а эллиптическая (она проще, а картинки красивее)
mega.nz/#!WhgSXIIA!-QohSfyl0MQS9P_0fBj0InFcadFfvj4IOShLy4SeI5g
(примеры, открывать Мозиллой)
И вот с кватернионами вожусь.
Для гитхуба ещё не готово, но когда сделаю, здесь на хабре тоже напишу.
Школьником (в классе 6м кажется) прочитал про кватернионы в «Кванте». Подумал, что четыре числа определяющих кватернион замечательно совпадают с количеством измерений мира. А значит, можно описывать мир кватернионами в которых одно к-число содержит время+три координаты. И эта идея а) моя, б) безусловна гениальна. ))))
Вынужден разочаровать, но эта идея: а) приходила в голову практически любому человеку, который впервые в жизни знакомился с кватернионами как существующим где-то там математическим объектом (я, прочитавший в школе том Аванты+ вслед за старым справочником Выгодского, в их числе); б) нисколько не гениальна, здесь работает принцип, согласно которому мозг ищет закономерности там, где их может не быть, основываясь только на внешнем подобии объектов (кватернионы действительно похожи на алгебраические объекты вида «3+1», фигурирующие в уравнениях СТО и преобразованиях Лоренца, но математически фундаментально от них отличаются); в) предыдущие два пункта становятся очевидны любому, кто начинает копать матчасть и курить матаппарат, задействованный в различных прикладных областях физики.

Я тоже, будучи школьником, любил находить «очевидные» закономерности и гордиться этим, внутренне считая себя великим гением. Только меня потом быстро опускали с небес на землю, когда я начинал в присутствии кого-то сведущего об этом рассуждать) Отдельное спасибо моему преподу по физике, который любил задавать каверзные вопросы, дающие человеку самому понять, что он заблуждается. Это нормально, все через это проходят, не вы первый, не вы последний.
Видимо в моем посте было недостаточно смайликов. Через три года я дошел до преобразований Лоренца и моя наивность, в плане того, что я до этого додумался первым (ха-ха) стала очевидна.
Кстати есть любопытная историческая тема с поиском триплетов (увы, невозможных).
Не огорчайтесь, идея правильная. Есть способ задавать преобразования Лоренца парами кватернионов.
Не пытайтесь понять это допущение, потому что логичных причин его существования нет.

Если знать математику, то становится ясно, что это неверное утверждение. Есть ряд алгебраических и геометрических мотиваций.
Вообще-то геометрическая мотивация (если Вы о точках на комплексной плоскости) — это следствие, а не причина. Это способ наглядно показать, что такое комплексные числа.
Так, о чем именно вы говорите?
Я говорю о фразе, что i^2 = -1 получается естественно, понять это можно. Нет никакого следствия, а есть много эквивалентных способов построить комплексные числа: удвоение алгебр по Кэли, фактор по неприводимому многочлену, алгебраическое описание группы изометрий R^2,…
Вообще говоря сводить появление комплексных чисел только к желания решить уравнение некорректно. Они естественным образом возникают в куче областей математики, значительно упрощая логику действий. В статье говорится только про действия над ними, чего явно недостаточно для понимания их необходимости. Кватернионы намного более специализированная вещь, и существенно применяются именно из-за удобства описания ими поворотов трехмерного пространства.
Вот на самом деле видео про Гамильтона и его замечательную жизнь, которое каждый должен посмотреть :)
No one uses my quaternions, but just you wait

В свое время тупил и никак не мог понять, почему i^2 = -1, j^2 = -1, но i != j. Потом понял, что есть другая аналогия, (-1)^2 = 1, 1^2 = 1, но 1 != -1 и обрел душевный покой :) Может кому то еще поможет ) А еще понял, что некорректно заявлять, что i = sqrt(-1), как нас учили в школе. Мы можем только i^2 заменить на -1 и обратно.
Почему некорректно?
ну потому что тогда получится, что i = sqrt(-1), j = sqrt(-1), а значит i == j, что неправильно

Ну и еще как минимум теряется значение -sqrt(-1), которое тоже подходит.

Можно как-то так писать: i = sqrtx(-1), j = sqrty(-1). В двумерном варианте только одно мнимое направление, там будет просто sqrt(). Просто тут много решений, как у sin(x) = -1, подходит i в любой нечетной степени.
Нельзя так писать даже для комплексных чисел. Потому что в комплексных числах sqrt — многозначная функция, которая всегда возвращает два значения с противоположными знаками.
Ну да, я скорее про то, что геометрически это разные sqrt, у одной значения лежат в одной плоскости, у другой в другой.
Не, это Вы просто с комплексным анализом и его «многозначными функциями» толком не знакомы :). С точки зрения комплексного анализа sqrt(1) = ±1 — и +1 и -1 являются значениями sqrt(1) и из этого не следует что -1 == +1. Впрочем из-за этой неоднозначности разумнее конечно все же писать i^2=-1 поскольку sqrt(-1)=±i.
Погодите, разве sqrt — это не функция взятия арифметического квадратного корня? Если бы мне была нужна многозначная функция, я бы написал 1^0.5 = ±1.
Упомянутая вами функция взятия арифметического квадратного корня работает только в поле действительных чисел. А в полях комплексных чисел, кватернионов или аналогичных существуют только многозначные функции sqrt.

Это связано с тем, что нет хорошего способа выбрать «главное» решение уравнения x2 = a
Спасибо за разъяснение.
Мнимые единицы есть не только в комплексных числах. В дуальных числах i²=0, а в двойных i²=1, при этом i≠1. Соответственно и определить в них мнимую единицу как корень из нуля или единицы никак не получится.
спасибо за статью, надеюсь что я всё же разберусь с комплексными числами.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории