Pull to refresh

Comments 25

Эта алгебра изоморфна (то есть, структурно идентична) алгебре комплексных матриц 2×2

Вот это интересный факт, которого не хватило мне в прошлой статье и я безуспешно пытался найти его в комментах. Он же и объясняет "8-мерность" этой алгебры.

UPD Хотя, оно там есть. Почему-то не пришло понимание.

Мы где то около года это объяснение искали, и вот только что нашли. Сопоставить 8 математических измерений с 3-я физическими, та еще задачка оказалась

Лаборатория геометрической алгебры и приложений факультета экономических наук ВШЭ разрабатывает универсальный язык для математики, физики и других точных и естественных наук.

..

Можно сказать, что все началось с курса «Основы теории алгебр Клиффорда и спиноров», который я стал читать в Вышке с 2020 года как общеуниверситетский факультатив, а также курс по выбору для магистрантов.

Публикация Ведомости от 01.11.2025

Случайно не в этой лаборатория ВШЭ? Или это параллельная активность?

Параллельная, и это хорошо, инструмент заслуживает интереса

Параллельная, но я собираюсь с ними впервые связаться в ближайшие пару недель для одной совместной активности внутри ВШЭ.

Так что была параллельная, но в этом месяце начнем пересекаться.

Я не согласен, что вместо векторов, кватернионов и т.п. в 3д графике стоит использовать один мультивектор.

В мультвекторе 8 элементов (а если добавить ещё четвёртое измерение для перемещений - все 16), и переможение двух мультиветкоров - это куча операций. (Кажется, порядка 16^2)
У меня получилось, что лучше наоборот навыделять подклассов, которые нужны в реальной жизни, как минимум такой список: точки, векторы, обобщённые точки, линии, плоскости, идеальные плоскости, кватернионы, трансляторы, моторы, псевдоскаляр (и можно ещё больше сделать, но количество реализаций для бинарных операций растёт как N^2 и особо не разгуляешься)

И вот эти подклассы получаются простыми (вектор - только 3 числа, обобщённая точка - только 4, линия - 6, идеальная плоскость - 3), бинарные операции тоже радикально упрощаются и система типов языка программирования начинает помогать. А геометрическая основа в виде мультиветкора помогает в том, что все эти классы согласованы друг с другом и ведут себя как мультиветкоры, у которых часть полей нули.

Например, sandwich продукт транслятора и вектора упрощается до трёх сложений и трёх умножений на 0.5

Если явно написать типы и сказать что а б с это точки, то более-менее очевидно что а ^ б это линия и а ^ б ^ с это плоскость. Если вместо этого использовать просто "мультивектор", для всего ,то все эти предположения приходится держать в уме и вдобавок из-за ошибок округления в цепочках вычислений могут вылазить не-нулевые маленькие значения там, где должен быть ноль.

Либо, как вариант, надо брать мультивектор, но в качестве полей подставлять не числа, а символьные выражения, и потом для результата делать "упрощения", что тоже не просто.

Тут история про геометрический смысл, думаю следующим шагом поискать смысл физический. Когда он найдется для всего этого многообразия, тогда и обсудим. Пока что рановато делать какие то выводы

Суть мультивектора в замкнутости операций.

Как в 3d-графике, универсальная матрица трансляции позволяет скомбинировать множество преобразований, пользуясь ассоциативностью умножения, и все расчёты свести к одному умножению на итоговую матрицу.

Если бы для каждого преобразования (вращение, перенос, проекция) были бы свои типы, было бы невозможно комбинировать преобразования.

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

Всё прекрасно комбинируется.
Если я перемножаю кватернион и кватернион - получается кватернион.
Если перемножу кватернион и транслятор - будет мотор.
Если перемножу кватернион с мультивектором - будет мультивектор.

Аналогично, когда мотор двигает плоскость, он даёт новую плоскость, а когда на линию - новую линию, на точку - даёт точку.

Если всё упростить до "мультивектор умножается на мультивектор", вся эта информация потеряется и пользоваться становится неудобно и непрактично - вместо перемножения двух кватернионов из 4 чисел каждый получается геометрическое произведение двух мультивектором из 16 чисел, причём большая часть нули и это всё избыточно.

Вот например как у меня получилось: https://github.com/Kright/ScalaGameMath/blob/master/cpp/pga3d/Motor.h#L91

В 3д графике нет необходимости умножать мультивектор на мультивектор.
Там будет мотор (8 компонент), собранный как комбинация всех трансформаций, который будет двигать точки в модели (3 или 4 компоненты).

Вычислительно это проще на порядок, чем считать sandwich product мультивектора и мультивектора.

Вот тут можно сравнить длину выражений для sandwich product для мультивектора, и, например, для мотора и точки:
https://github.com/Kright/ScalaGameMath/blob/master/cpp/pga3d/opsSandwich.h#L20

В случае транслятора и точки вообще тривиально:

constexpr Point Translator::sandwich(const Point& b) const noexcept { 
    return {.x = (b.x - 2.0 * wx), .y = (b.y - 2.0 * wy), .z = (b.z - 2.0 * wz)}; 
}

Это выражение получится, если взять мультивектор с нулями и упростить.

Условно, я в любом месте могу написать motor.toMultivector().sandwich(point.toMultivector()) и результат будет эквивалентен выражению motor.sandwich(point).toMultivector(), но второе считать намного быстрее.

Возможно, есть несовпадение вашей терминологии с авторами этой статьи.
У вас мультивектор - 16 компонент, тут - 8, у вас бивектор - 6 компонент, тут - 3.

В наших статях с @master_program исследованы комплексные матрицы 2х2 из 8 компонент. А коллега @IgorSL говорит про 16 компонент которые появляются в алгебре Клиффорда следующего ранга, на базе произвольных вещественных матриц 4х4 (которые строятся из произвольных блоков вещественных матриц 2х2). Несовпадений нет, просто алгебра Клиффорда формально может быть любой размерности 2^n. Говорят, что это в конечном итоге приводит к записи преобразования Фурье в алгебре Клиффорда. Но похоже, что на такую глубину мало кто копнуть может, так как там выражения в индексной записи, и они жутковато выглядят, для не профессионального математика. Так же там используется полностью абстрактное математическое пространство, по крайней мере пока что.

Да, теперь разобрался. Вспомнил, что библиотеки 3d работают 4-мерными точками (x,y,z,w) в проективном пространстве, чтобы перенос на вектор тоже записывался через умножение, и перенос можно было включить в композицию-произведение. У него алгебоа Cl(4,0), у вас Cl(3,0).

Хотя, конечно, возникают интересные вопросы, например, какой геометрический смысл бивектора xw или yw, в приложении к исходному 3d-пространству. Если такого нет, то из бивектора, описывающего реальные плоскости, можно убрать все w-компоненты?

Не разбирались с этим, так как все еще достаточно с чем поработать в комплексных 2х2. Например на плоскости xz, формально можно определить параллелограмм через матрицу Грамма и определитель, а в 3D пока чего то аналогичного вменяемого получить не удается https://habr.com/ru/articles/949114/

Смысл есть, это как раз то что связано с перемещением.
Например, бивектор yx описывает скорость вращения (и даёт кватернион как exp(yx * angularVelocity * t), и бивектор wx будет описывать линейную скорость и можно получить транслятор как exp(wx * linearVelocity * t)
И поскольку wx в квадрате это 0, а не -1, экспонента превращается в простую линейную запись (1 + wx * linearVelocity * t), а не в выражение с косинусами и синусами как в случае кватерниона.

И да, алгебра про которую я говорю, Cl(3, 0, 1), и вот эта вырожденность с w * w = 0 критически важна. В Cl(4, 0, 0) фокус с линейным перемещением не пройдёт.

P.S. и ещё в CL(3, 0, 1) будет градация точка-линия-плоскость, плоскость будет либо тривектором, либо 1-вектором в зависимости от выбранных обозначений. Бивектор будет описывать линию в пространстве.

Да, целиком мультивектор на мультивектор - вычислительно затратно. Нужно разбивать на подвиды и искать наиболее оптимальные представления.

В поиске оптимальных вычислений очень много нюансов.

Например, 2 комплексных числа умножить - достаточно 3 умножения вещественных использовать вместо 4, это серьезный выигрыш в производительности.

Я имею в виду

(a+b i)(c+d i)=(a c-b d)+i((a+b)(c+d)-a c-b d)

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

Зависит от приложений.

В 3d-графике композиция разных преобразований (вращений, переносов и т.п.) выполняется не так часто, как применение вычисленной композиции, с полными 16 компонентами, к большому массиву точек. Первое можно не оптимизировать.

С аппаратной стороны, в видеокартах проще потоком перемножать матрицы 4x4, не разбираясь, какие там есть частные случаи с обнулёнными компонентами. Ветвления больше откушают.

Любопытно, что описанная здесь гармоническая метрика χ = (R + I + G)/3 полностью совпадает с FRA-метрикой, которую я публиковала две недели назад в LinkedIn. источник в LinkedIn. И даже вырезки из текста с источника.

Формула, структура и примеры (R — устойчивость, I — целостность, G — рост/гармония) идентичны. Возможно, автор вдохновился FRA-подходом .Буду признательна за ссылку на источник для прозрачности исходного текста который переработали.

Ваша цитата "И огромное спасибо @master_program за переработку исходного текста в эту статью, а так же за дополнения и картинки, очень повысившие удобство чтения."

Пришлите почту, отправлю мой исходник

Я немного занят подходами к ОТВ. Но там другие формулы. Мне бы (Endorsement) по направлению GL, AT и AI. Вы там ещё не писали?

К сожалению не знаю этих аббревиатур

В последнее время на Хабре просто шквал статей про алгебру Клиффорда (мое субъективное впечатление). Если бы все это не было чистой математикой, я бы подумал что кто-то хочет внести в общественную дискуссию нарратив о мультивекторах.

Ну не так уж и много, всего три автора. Вы же не против?

Мне это нравится. Алгебра Клиффорда красивая. Продолжайте.

Sign up to leave a comment.

Articles