Комментарии 208
Самое то для воскресного утреннего чтива )
Кто дочитал до конца? Я на 30% сломался.
Согласился с автором после 7-го слова в заголовке.
С утра держу открытую вкладку. Вернусь домой с работы, тогда поговорим…
Автор, я сломался тут:
Единичный вектор n задает нам ориентацию зеркала, стоящего в начале координат и перпендикулярного этому вектору.
То есть, с потолка ввели это "перпендикулярный". А потом стали убеждать, что и сам вектор тоже ничего так. Зачем?
И в самом начале пропущено главное - если ветор это действие, то что же объект этого действия?
Ну и вообще, много в тексте появляется вдруг, из ниоткуда. Вот не было вектора V, а теперь он вдруг уже есть. Надо же писать: тогда для некого вектора V... Или, допустим, у нас есть вектор V, тогда...
Так что же объект действия? Похоже, что другой вектор. Тогда получается, мы действуем над действиями? Хмм... И кстати, тогда умножение-зеркалирование - не коммутативная операция? Это все надо писать сразу, не оставляя читателя гадать и блуждать в потемках. Дальше читать не стал - слишком много уже вопросов по тексту)
"Так что же объект действия? Похоже, что другой вектор. Тогда получается, мы действуем над действиями? Хмм... "
А что вас тут смущает? Именно это и описано. Но действовать можно не только на векторы.
Сразу же как объект действия используется другой вектор.
Если перпендикулярный, то получатся отражения Хаусхолдера известные. Они потом вводятся все же, через минус (а на практике используют мнимую единицу).
Суть то в том. что зеркало к вектору и под углом можно поставить.
Число
5: это не просто «пять яблок». Это оператор «увеличить в 5 раз».Комплексное число
i: это не просто√-1. Это оператор «повернуть на 90 градусов». Умножьте наiеще раз — повернете на 180. Отсюда иi² = -1.
Здесь понятно
давайте предположим, что вектор — это не стрелка. Вектор — это зеркало.
Единичный вектор
nзадает нам ориентацию зеркала, стоящего в начале координат и перпендикулярного этому вектору. Вся суть вектора — отражать другие объекты.
Здесь непонятно. Тогда другие вектора - тоже зеркала или всё же отражаемые объекты?..
Или, к примеру, у нас есть вектор скорости. Что он отражает, как в зеркале?
Суть идеи в том, что мы одновременно один и тот же объект считаем и зеркалом, и отражаемым объектом. В этом вся красота геометрической алгебры.
Никаких скоростей пока что тут нет, есть только геометрические векторы.
Тогда другие вектора - тоже зеркала или всё же отражаемые объекты?
Лично я тоже не люблю абстрактные двойные смыслы, поэтому пользуюсь неким соглашением, что в произведении ab, справа это оператор, слева объект, тогда скаляр это проекция на направление параллельное "a", бивектор - проекция на направление перпендикулярное "a". Но это вопрос предпочтений, а не смысла.
Для более сложных объектов, представленных матрицами, оператор считается сопряженным и транспонированным (эрмитово-сопряженным), чтобы произведение объекта на себя давало в точности матрицу Грамма.
Для более сложных объектов, представленных матрицами, оператор считается сопряженным и транспонированным (эрмитово-сопряженным), чтобы произведение объекта на себя давало в точности матрицу Грамма.
Для понимания этой фразы, очевидно, требуется бэкграунд в виде десятков тысяч часов над математическими книгами и журналами...
Даже не представляю, какие ценные знания даёт понимание этой фразы...)))
Да нет, это материал первого курса первого семестра по линейной алгебре.
Матрица Грамма - это симметричная положительно определенная матрица, состоящая из попарных скалярных произведений каких-то векторов.
Тут X - это разные векторы. Если они комплексные, то имеется в виду умножение комплексно сопряженного на исходный вектор.
Поскольку правило умножения матриц - это "строка на столбец", то эти Х буквально являются столбцами исходной матрицы.
Это всё просто обобщение взятия квадрата модуля числа. Мы хотим, чтобы произведение объекта на "себя" (в правильном смысле "себя") раскрывало его фундаментальные геометрические свойства. Для набора векторов эти свойства — это все их длины и все углы между ними, которые хранятся в матрице Грама.
Для понимания этой фразы, очевидно, требуется бэкграунд в виде десятков тысяч часов
И даже этого хватит далеко не всем. Тут нужен определённый стиль и образ мышления, их недостаточно знать, тут надо "думать" этими категориями, иметь в голове дополнительные измерения, что ли, чтобы оно уложилось там "правильным образом". Я когда в Физтехе грыз гранит науки, у меня никогда не получалось думать формулами, хотя я их вроде знал, я был практиком, делал эксперименты и подводил под них теорию, но половина потока были "теоретики", для которых любое доказательство начиналось с "очевидно что...", им не нужны были эксперименты, только стол, лист бумаги и авторучка, хотя изначально у нас были одни знания, они могли сделать более далеко идущие выводы.
Здесь непонятно. Тогда другие вектора - тоже зеркала или всё же отражаемые объекты?..
Тут примерно как с числами.
Мы берём и говорим "Чисто N - количество яблок у Васи". Или говорим, что "Число P - курс доллара к рублю". Мы в каждом конкретном случае вкладываем в числа какой-то смысл и не будем делать бессмысленные операции типа сложения яблок с курсом доллара, хотя математика нам не запрещает. Точно так же для конкретного вектора мы можем держать в уме что "это отражение, записанное в виде вектора"
Но вообще в геометрической алгебре скорость это бивектор. А экспонента скорости, умноженной на время даст трансформацию, R = exp(v * t).
Смысл, вкладываемый в количество яблок или курс доллара понятен 99% населения. Но вот смысл "отражения в виде вектора" далеко не так понятен... И под отражением в статье понималось зеркальное отражение с соответствующими построениями!!!
Но вообще в геометрической алгебре скорость это бивектор. А экспонента скорости, умноженной на время даст трансформацию,
R = exp(v * t).
Я как раз и обратил внимание на этот стремительный (и не понятный) переход от яблок к вот этому всему...
Тогда другие вектора - тоже зеркала или всё же отражаемые объекты?..
Я могу отразить зеркало в другом зеркале, потому что оно обьект и абстракция одновременно
Или, к примеру, у нас есть вектор скорости.
Тут люди о высшем, а вам бы только в GTA погонять)
Мы начали с простой идеи и, следуя логике, пересобрали всю векторную алгебру, сделав ее проще, мощнее и интуитивнее.
Раз так все просто, я лучше промолчу, что ничего не понял.
Странный язык изложения.
В обычной алгебре уравнение 5x = 10 решается делением.
В обычной алгебре, для решения уравнения с неизвестными, выполняется преобразование, при котором неизвестное переносится в одну часть уравнения а известное в другую. То что потом надо выполнить деление это уже вторично.
Деление — это умножение на обратный элемент (x = 10 * 5^1)
Деление — это не умножение. Но деление можно выразить как "умножение на обратный элемент".
Мы хотим так же решать и геометрические уравнения!
Почему нет? Уравнения в геометрии это все те же математические уравнения. К ним применимы те же самые принципы преобразования.
Число 5: это не просто «пять яблок». Это оператор «увеличить в 5 раз».
Это нейронка выдала?
Что, если каждый математический объект — это не просто статичная сущность, а оператор, выполняющий преобразование?
Не могут все математические объекты быть операторами.
Число 5 с точки зрения умножения - это увеличить в 5 раз. С точки зрения сложения - это сдвинуться на 5 вдоль числовой оси. На числовой оси число 5 умножением растягивает в 5 раз ось.
В попытках объять необъятное, охватить неохватное и впихнуть невпихуемое - стОит все же сделать различие между скалярным и векторным. Число 5 это всего лишь иероглиф. А вот что этот иероглиф описывает - зависит от фантазии пользователя и той системы аксиом, которых он придерживается....
Да и вообще - умножения не существует. Есть всего лишь повтороение одного и того же указанное количество раз....
Умножение на пи, например ;)
Нет, не "иероглиф". Вы тут путаете знаки и понятия. В разных языках число пять записывается разными знаками ("иероглифами"). Однако, понятие числа — количестве единичных сущностей — не меняется. Все разные знаки в китайском, французском, иврите и марсианском будут обозначать одно и то же. Пять оно и в Африке пять.
В обычной алгебре, для решения уравнения с неизвестными, выполняется преобразование, при котором неизвестное переносится в одну часть уравнения а известное в другую. То что потом надо выполнить деление это уже вторично.
К x было применено умножение на 5. Обратная операция(по 1 аргументу) деление на 5. Чтобы не нарушать (не)равенство нужно к 2 аргументу оператора сравнения применить ту же операцию - деление на 5. Перестановки между "частями" уравнения вот это как раз костыль. Да и нет никакой перестановки. Эта мнимая перестановка и есть применение обратных по 1 аргументу операций
"В обычной алгебре, для решения уравнения с неизвестными, выполняется преобразование, при котором неизвестное переносится в одну часть уравнения а известное в другую. То что потом надо выполнить деление это уже вторично. "
В школе могут так объяснять, прежде всего в российской (в западных странах в школах обычно объясняют через одновременные преобразования обеих частей).
А если это строго описывать через аксиомы, то нет такого определения "перенести из одной части в другую". Есть последовательность одинаковых преобразований обеих частей уравнения.
В школе могут так объяснять, прежде всего в российской (в западных странах в школах обычно объясняют через одновременные преобразования обеих частей).
Трудно в 4-ом классе делать преобразование обеих частей, когда они пользуются только натуральными числами. У них тогда должны быть и отрицательные числа, и дроби. Математика Петерсон, если что.
Зачем? "чтобы сохранялось равенство мы можем делать одинаковые действия над обеими частями (только на 0 умножать нельзя, а то результата не останется)"
x + 5 = 8
вычтем 5 с обеих сторон Х + 5 - 5 = 8 - 5
И никаких отрицательных чисел, просто вычитаем (умеем) положительное целое 5 (знаем)
А за тем, чтобы х = -2 не получилось следит автор задачника. С дробями аналогично. Делим на целое и все.
Не могут все математические объекты быть операторами
О, тут должен быть холивар фанатов функционального программирования)
Но деление можно выразить как "умножение на обратный элемент".
А не определить? Если нет, жду ваше определение деления.
Возможно, если бы с нее начинали в вузах
Увы, но алгебра Гиббса, которую проходят в школе и вузах победила алгебру Клиффорда. А менять легаси очень непросто. А переписанная на язык геометрической алгебры физика есть, например, в книгах Geometric Algebra for Physics и New Foundations for Classical Mechanics. Не знаю, есть ли перевод на русский язык.
Переводов на русский язык пока что нет. Переписанная на язык геометрической алгебры физика есть еще в научных статьях, прежде всего самого Давида Хестенеса.
Не советую читать New Foundations for Classical Mechanics. Там геометрическая алгебра используется только для вращений, и в итоге там какой-то микс геометрической алгебры и обычных формул. Оно и сложно и не сильно понятно зачем. Книга вышла в 1986 году и на мой взгляд устарела.
Лучше сразу вот эту книжку читать про plane-based геометрическую алгебру: https://bivector.net/PGADYN.html
Например, если надо тело подвинуть и повращать, Хестенец напишет (dV + R a R^{-1}) и будет это тащить через все дальнейшие формулы, хотя plane-based алгебра позволит это записать как M a M^{-1} и работать с такой формулой на порядок проще.
работать с такой формулой на порядок проще.
А с практической точки зрения, вычислительная сложность будет ведь такая же?
Будет отличаться в мелочах, но примерно так же.
Но не надо - запись (dV + R a R^{-1}) просто неудобная - комбинировать несколько трансформаций сложно, сделать что-то типа дифференцирования или нахождения логарифма тоже неудобно.
Например, в plane-based алгебре бивектор скорости вмещает в себя сразу и линейную и вращательные скорости тела. Если разделять линейное и вращательное на две сущности, то сразу удваивается количество формул и количество мест, где можно ошибиться.
Будет отличаться в мелочах, но примерно так же.
А стоит ли тогда овчинка выделки?
Если разделять линейное и вращательное на две сущности
Так все равно и размерности разные и законы преобразования при переходе к другим системам отсчета. Динамика скорости определяется массой и силой, а вращения, тензором инерции и приложеным моментом.
Ну и про расчеты в искривленных пространствах вообще лучше не говорить.
Так все равно и размерности разные и законы преобразования при переходе к другим системам отсчета. Динамика скорости определяется массой и силой, а вращения, тензором инерции и приложеным моментом.
Так в том-то и дело, что нет!
Будет сущность для инерции (по-сути тоже тензор), которая вмещает и тензор инерции и массу. Так же будет сущность, которая вмещает и силу и момент.
Будет формула преобразования, которая будет действовать на всё сразу!
Вот мой код для инерции: https://github.com/Kright/ScalaGameMath/blob/master/pga3dphysics/shared/src/main/scala/com/github/kright/pga3dphysics/Pga3dInertiaSummable.scala
10 чисел, в которых закодирован и тензор инерции, и масса, и положение центра масс. И что прикольно, для сложения нескольких тел (даже с центрами масс в разных местах), мне достаточно просто покомпонентно сложить.
Если математически смотреть, то там будет симметричная матрица 6x6, в которой два блока 3х3 - один с тензором инерции и ещё один 3x3, где диагональные элементы это масса тела, потому что "масса" для перемещения вдоль разных осей одна и та же.
Будет сущность для инерции (по-сути тоже тензор), которая вмещает и тензор инерции и массу.
Масса - граммы (извините, я так физик-теоретик с академическим бэкгораундом, так что в СГС). а момент инерции тензор g*cm^2. От того, что вы их в общую блочно-диагональную матрицу поместите, эта матрица тензором не станет).
10 чисел, в которых закодирован и тензор инерции, и масса, и положение центра масс.
Вы ведь понимаете, что 6 компонентов момента инерции зависят от ориентации тела? А чтобы пересчитать из начального положения в текущее, нужна еще ориентация (типа трех углов, или компонетнов матрицы вращения). Итого 13? Нет, конечно, можно взять за исходную ориентацию ту, где этот тензор инерции диагонален и отсчитывать вращения от нее, ну так тогда эту начальную ориентацию тоже нужно хранить? Жаль используемого вами языка программирования не знаю ;)
Да, в компоненте ww лежат граммы, в компонентах wx, wy, wz граммы на сантиметры или ещё как, в xx, xy... - граммы на квадратные сантиметры.
В мультвекторе в разных компонентах разные размерности. Иначе никак оно всё в одну сущность не поместится.
Понимаю, пускай зависят от ориентации. Я это представление использую, если надо посчитать суммарную инерцию нескольких жёстко соединённых тел.
Представление с отдельным хранением трансформации и диагональным видом у меня тоже есть.
В мультвекторе в разных компонентах разные размерности. Иначе никак оно всё в одну сущность не поместится.
Но тогда это не физика, а ООП, где можно и мух и котлеты положить на одну тарелку. Сравните с тензором электромагнитного поля, применение которого облегчает пересчет напряженностей полей при смене системы отсчета.
Ну вообще-то геометрическая алгебра сильно упрощает расчеты в искривленных пространствах, особенно если речь про ОТО.
Я вот только что закончил читать "Урожаи и посевы" Александра Гротендика (кстати, офигенная книга, рекомендую), и под впечатлением от прочитанного, вот не могу не заметить, что современная алгебраическая геометрия, если опереть её на схематический формализм Гротендика, позволяет рассматривать геометрическое произведение ab не только как внутреннюю операцию в алгебре Клиффорда, но и как морфизм в более общем пространстве функториальной природы — пространстве Гротендиковой топологии. Здесь взаимное расположение векторов кодируется уже вовсе и не числами, а гомоморфизмами между объектами категорий, а их симметричные и антисимметричные компоненты естественно интерпретируются как когомологические классы в группах когомологии Галуа, отражающих скрытые симметрии поля коэффициентов.
Таким образом, симметрическая часть геометрического произведения - как раз то самое "отражение", о котором Вы пишете в статье, соответствует инвариантам, фиксируемым действием абсолютной группы Галуа, а вот антисимметрическая часть образует нетривиальные 2-когомологии, описывающие ориентации, расслоения и вращения, аналогичные ротору в геометрической алгебре. В этом смысле каждый бивектор оказывается аналогом торсора, заданного неявно когомологическим классом, а сам ротор — это автоморфизм объекта в категории схем, определяемый через внутреннюю структуру поля Галуа. Из этой перспективы геометрическое произведение становится универсальной операцией склейки, выражающейся в том, что все, вообще все локальные данные — от скалярных проекций до ориентированных площадей — возникают как когерентные функторы на категории галуа-анализируемых пространств.
Приятная простота. Но что, кроме интуитивности она даёт?
Если геометрическая алгебра изучается уже давно, то положительные стороны должны себя проявить не только в плане интуитивной понятности. Например, сокращение количества вычислительных операций в каких-то областях было бы неплохим результатом. Ну или даже некие прорывы в ранее застойных областях, именно за счёт нового подхода (на интуитивности).
Можно найти такие улучшения?
Похоже, что нет. То есть для начального обучения, для лучшего схватывания и запоминания - да, подходит. Но если человек освоил некий альтернативный метод и хорошо запомнил все необходимые детали, то далее собственно интуитивная часть перестаёт давать серьёзные результаты. Всё потому, что хоть интуитивно понятная основа, хоть совсем непонятная, обе требуют много работы по выдвижению и проверке кучи гипотез, обработке массы попыток. А это нудно и долго. Привыкшие к интуитивности моментально сливаются в таких условиях. А педанты-писатели формул тупо рисуют закорючку за закорючкой и в итоге выводят нужный результат. Ну и что, если пришлось в два раза больше формул написать? Главное - дать старт педанту в нужно направлении, далее он сам, как трактор, пропашет самые что ни на есть неугодья.
Хотя простота, конечно, очень приятная штука.
У геометрической алгебры очень много практических применений именно в плане сокращения вычислительных операций. В последнее время еще стали ее в машинном обучении использовать, а также для поиска более эффективных алгоритмов в моделировании математической физики (кое-где находят новые хорошие).
В настоящее время геометрическая алгебра активно используется при программировании графики в компьютерных играх, моделировании движения дронов, в медицинской визуализации, в криптографии, в робототехнике, навигации.
Например, вам нужно сложить две дуги на сфере, для этого достаточно два ротора умножить и всё. А с помощью сферической геометрии это сделать куда сложнее.
В некоторых разделах физики ей даже нет альтернативы, потому что спин - это объект из геометрической алгебры.
Например, вам нужно сложить две дуги на сфере, для этого достаточно два ротора умножить и всё. А с помощью сферической геометрии это сделать куда сложнее.
Что вы понимаете под словом "сложить"?
Это значит, что мне надо сначала по направлению одной дуги пройти нужное расстояние, потом по направлению другой и понять, где я оказался.
Это значит, что мне надо сначала по направлению одной дуги пройти нужное расстояние, потом по направлению другой и понять, где я оказался.
А как дуги задаются? В любом случае вычисляем 3D координаты начал и концов, строим вектора и складывем. Какая нафиг сферическая геометрия? Также и ваши "роторы".
Вдогонку, а давайте заменим сферу эллипсоидом с разными осями?
В геометрической алгебре есть способ вычисления кватерниона дуги через координаты ее концов. Просто каждому концу сопоставляется кватернион без скалярной части. и нужно один поделить на другой.
С эллипсоидом не будет проблемы, можно сменить метрику в пространстве и рассматривать как шар в новых координатах.
Проблемы могут быть с заданием движения по поверхности произвольной формы. Но эти проблемы не больше аналогичных проблем с декартовыми координатами в той же самой задаче.
Например, вам нужно сложить две дуги на сфере, для этого достаточно два ротора умножить и всё.
А для того, чтобы получить эти два ротора из широты и долготы, курса и исчисленного пути нужно просто взять...
А просто посмотрев на ротор, капитан судна сразу поймёт курс и длину пути.
Действительно, зачем нужна эта сферическая тригонометрия?
На самом деле очень много всего даёт, причём именно в плане простоты и универсальности.
Классическое описание с векторами резко теряет всю простоту, если перейти к трёхмерным случаям с вращением.
Например, в геометрической алгебре, есть вектора, плоскости (внешнее произведение двух векторов) и точки (трёх векторов). Отражение относительно вектора работает одинаково для всего.
Причём если шагнуть в сторону физики - то сила это бивектор (линия), скорость это тоже бивектор (тоже линия, причём в случае вращения это будет ось вращения), и эти штуки аддитивны и тоже прекрасно отражаются/вращаются по тем же самым формулам.
И кстати отражение относительно точки - это комбинация трёх отражений.
Если же использовать представление силы как в классической физике в виде пары (точка приложения, вектор направления), то во-первых окажется что мы точку можем двигать вдоль вектора и иметь целую кучу представлений для одной и той же силы, во-вторых окажется, что такое описание не вмещает в себя крутящий момент (так что видимо нашей пары недостаточно), а в третьих если попросить кого-нибудь сложить несколько сил, приложенных к разным точкам, то это окажется ни разу не просто.
А ещё, что очень красиво, можно взять проективную геометрическую алгебру, там кроме вращений ещё будут перемещения (и на мой взгляд использовать надо именно её, вот там раскрываются все возможности).
Вот я писал заметки когда разбирался: https://kright.github.io/2024/06/02/Plane-based-геометрическая-алгебра-для-описания-движения-тел.html
И в итоге я написал свою библиотеку: https://github.com/Kright/ScalaGameMath/tree/master/pga3d
В процессе разобрался со всем ещё лучше и мне очень понравилось.
И поверх этого всего написал физический движок, вот можно посмотреть на симуляцию подвески и трансмиссии автомобиля, каждый рычаг подвески честно симулируется: https://www.youtube.com/watch?v=wqt0ylxBqnU
Сейчас переписываю библиотеку и физический движок на C++ и хочу использовать их в Unreal Engine.
тоже, но я решил написать свой движочек )
Скрытый текст

как использовать бивекторы не знаю, спасибо glm, хотя свою либу по матеше тоже имею ) тут 100 моделек анимированных(99 на репите и 1 игрок) 657 мегабайт(моделька мега оптимизированная - 660 вершин 2500 индексов и 1 рандомная текстурка :) ) всего все анимации предпосчитаны, интересно как такое весит на анриале )
upd всё в однопотоке - это opengl ) лагов нет(ГПУ и ЦПУ - уже лоу медиум сегмент) - что логично так как всё посчитано в момент загрузки 1 раз, а применяется на ГПУ
upd2 посмотрел вашу статью, мультивектор частично напомнил кватернион
можно raylib попробовать он полегче чем анриал, и там примеров навались + glm имеет вроде как ускорение с define GLM_FORCE_INTRINSICS
Значит, ab — это в точности обратный элемент к ba! То есть ab = (ba)⁻¹ = R⁻¹.
Наша формула для двух отражений (то есть, для поворота!) превращается в нечто невероятно элегантное.
Мне кажется, надо всё-таки ввести операцию reverse и явно про неё сказать (та самая, которая меняет порядок векторов на обратный).
Потому что, например, кватернион это скаляр + бивектор, и reverse для кватерниона меняет знак только для бивекторной части, не трогая скаляр. И что важно - это тривиальная замена знаков, а не что-то потенциально сложное типа нахождения обратной матрицы.
И ещё мне кажется, что слишком мало внимания уделено дуальности, а она буквально пронизывает всё. В геометрической алгебре любой размерности вектор будет дуален плоскости (или гипер-плоскости в случае 4д и линии в 2д), и вообще говоря можно перевернуть всё наоборот и сказать, что вот есть гиперплоскости и это базовый элемент, их внешнее произведение "понижает" размерности и так можно получить линии и точки. И формулу отражения писать относительно плоскости, а не вектора.
P.S. И ещё очень часто любят вводить дуальность как домножение на I - но в общем случае это некорректно. Лучше вводить дуальный элемент как тот, который при домножении на исходный даст I, типа ab = I.
Потому что можно взять генератор, у которого квадрат будет равен нулю, и формула вида aI будет давать не тот результат. А генератор с квадратом-нулём как раз будет нужен для представления линейных перемещений.
Оно распадается на части.
. Его симметричная часть
— скалярное произведение (проекция). Его антисимметричная часть
— бивектор (ориентированная площадь).
Так - первая часть - скаляр (вещественное число), вторая внешнее произведение векторов (очень грубо говоря некоторая многокомпонентная хрень). А тогда, что такое - '+'? Вот пусть компоненты векторов будут (a1, a2, a3) и (b1, b2, b3). Чему будет равно ваше произведение?
Умножение означает применение оператора к оператору. Сложение означает, что мы складываем полученные объекты после того, как применили операторы.
Ну так ровно это и будет, что написано: скаляр + бивектор. В координатах
В координатах получается вектор из 4 компонент, то есть (a1,a2,a3)*(b1,b2,b3)=(c1,c2,c3,c4)?
В координатах получается вектор из 4 компонент,
Это не вектор (тензор 1-го ранга), который изменяется по определенным правилам при вращении системы координат.
Не суть, главное что 4 компонента. А значит, такое умножение не замкнуто. Как на этом строить алгебру?
4 компоненты - не приговор. Тензор электромагнитного поля 4х4.
Оно замкнутно.
Допустим, есть генераторы e1, e2, e3.
Из них можно собрать 8 комбинаций:
скаляр (без генераторов)
векторы (генераторы e1, e2, e3)
бивекторы (
е1*е2,e1*e3,e2*e3)псевдоскаляр (
e1*e2*e3)
Больше ничего получить невозможно, потому что 1 = e1*e1 = e2*e2 = e3*e3 и при повторении генераторов они схлопываются обратно в скаляр.
В общем случае в алгебре с тремя генераторами мультивектор будет иметь восемь компонент и это всё будет замкнуто.
А если не в 3D?
Там два в степени количества генераторов.
Ладно, ерунду спросил. Но и вы умолчали, что такое, например (e1*e2)*(e2*e3)? Подобные члены ведь возникнут при умножении обсуждаемых объектов?
Это будет е1 * е3
e2 свернутся в единицу.
Ещё ei ej = - ej ei для i != j поэтому можно менять порядок элементов
А точно это умножение ассоциативно, что так скобки раскрывать? А то смотрите, можно и так сделать: (e1*e2)*(e2*e3) = - (e1*e2)*(e3*e2) = -(e1*e2*e3)*e2 = -e2
И давайте, вернемся к случаю, пусть четырехмерного пространства. Тут еще и (e1*e2)*(e3*e4) может возникнуть.
Извиняюсь, что встреваю, но e1*e2*e3 не равно -1. e1*e2*e3 - это псевдоскаляр, особая сущность. Её квадрат равен -1.
А разве а 3D это не векторно-скалярное произведение 3х векторов?
Нет. Хотя они тесно связаны. Если не ошибаюсь, a*b*c = |abc| e1*e2*e3, где |abc| - то самое векторно-скалярное произведение.
Оно замкнутно
Понятно. Тогда формула выше (для произведения ab) - неполное определение произведения. Нужна формула произведения для 4-х компонентных объектов.
Или даже не 4 компонента, а больше? Увидел выше ваше сообщение про 8 комбинаций. То есть, элемент в этой алгебре задаётся 8 числами.
Описанных правил достаточно. Произведение 4-х компонентных объектов следует напрямую из них. Например, e123 e23 = - e123 * e32 = e122 = e1.
Опять спрошу.
А откуда взялась ассоциативность вашей операции?
С моей точки зрения это можно даказать, лишь приведя конструктивный алгоритм, который из двух массивов, состоящих из 4 вещественных чисел, делает один, такой же длины. Пожалуйста. Это ведь должно быть просто?
Ассоциативность следует из того, что смысл умножения тут - это композиция операторов преобразования пространства.
Впрочем, она же следует из базовых правил. Ассоциативность есть в правилах на уровне умножения отдельных векторов, следовательно с любыми комбинациями тоже работает - так как все эти комбинации есть просто формальные многочлены от этих векторов..
"С моей точки зрения это можно даказать, лишь приведя конструктивный алгоритм, который из двух массивов, состоящих из 4 вещественных чисел, делает один, такой же длины. "
А какое отношение этот алгоритм имеет к геометрической алгебре?
Если вы имеете в виду умножение спиноров в 3D (вектор + скаляр), то вообще-то произведение двух спиноров в общем случае дает сумму спинора с ротором. То есть два массива из 4 чисел дают массив из 7 чисел.
Или вы про 2D. Тогда всё просто - таким алгоритмом является алгоритм умножения матриц. Геометрическая алгебра в 2D в качестве матричного представления имеет все возможные матрицы размера 2 на 2, состоящие из вещественных чисел. Устроено это очень просто, вот так:
Так суть этого умножения в том, что оно замкнуто.
Второй раз спрашиваю, что такое первый '+'? Как вы складывете скаляр и бивектор?
Так же, как в комплексных числах a + bi складывают вещественную и мнимую часть.
Только тут "дополнительных" частей много разных.
Только комплексные числа можно еще и умножать и много что еще. А здесь? Тоже можно? Нет, тогда я продолжаю считать, что это искуственное объединения скаляра и псевдотензона.
Можно. Комплексные числа это частный случай геометрической алгебры, когда генератор только один.
Можно и складывать, и умножать, и экспоненциировать и вообще любую функцию представить в виде ряда Тейлора и вместо числа подставить туда мультивектор.
В смысле? Покомпонентно, или скаляры отдельно, а бивектора отдельно? Но разве произведение бивекторов, это тоже бивектор?
Умножать геометрическим произведением и смотреть на всё вместе как на мультивектор.
Геометрическое произведение бивекторов даст сумму скаляра и бивектора.
Можно складывать, вычитать, умножать, делить, аналитические функции вычислять.
Можно складывать, вычитать, умножать, делить, аналитические функции вычислять.
Конкретно как? Хотя бы про умножение. Так, чтобы по вашей инструкции можно в коде реализовать... И лучше в общем виде, не 3D. Но для начала и так сойдет.
Так все правила же описал в статье: обычные правила для сложения и умножения, только нет коммутативности. Зато ei*ei = 1, ei*ej = - ej*ei если i не равно j. Больше никаких правил не нужно.
Это было про вектора. А тут уже говрят про результаты "геометрического умножения". И нужна ассоциативность. Откуда?
Ассоциативность есть с самого начала, она никуда не девалась.
Ассоциативность есть с самого начала, она никуда не девалась.
Т.е. вы ее постулировали и система аксиом осталась непротиворечивой?
Ну тут есть 3 основных способа
Использовать матричные представления, для 3D как раз матрицы Паули отлично подойдут
Использовать символьные вычисления (правила преобразования символов здесь в статье уже заданы все, их достаточно).
Задать базис в пространстве мультивекторов и на нем определить все операции
Последний третий способ самый сложный, но если фиксировать размерность пространства, то почему бы и нет
При этом, видимо, проще всего написать программу, которая эти операции автоматически определяет сама (например, через матричное представление), хранит в виде таблицы и потом использует. Проще говоря, такая программа должна будет:
Сгенерировать весь базис в лексикографическом порядке и пронумеровать
Для каждого базисного мультивектора написать матричное представление
Сгенерировать таблицу умножения базисных мультивекторов
Впрочем, возможно, проще сделать иначе. Например, строить эту таблицу с постепенным повышением размерности. Думаю, там можно просто рекуррентную формулу вывести и всё. Могу написать об этом статью.
Использовать матричные представления, для 3D как раз матрицы Паули отлично подойдут
Извините, я через ваш текст продраться не сумел. Какой-то он очень типа песни о вещем Олеге. Расплываясь мыслью по древу...
Но уж если ими воспользоваться, то одной (единичной матрицы) не хватает для полного базиса. См. https://ru.wikipedia.org/wiki/Матрицы_Паули
Ладно, заменим скаляр на скаляр, умноженный на sigma[0]. Но тогда оказывается, что эта алгебра изоморфна алгебре кватернионов. Теперь читаем https://ru.wikipedia.org/wiki/Кватернион и начинаем громко смеяться.
Итого, поздравляю, вы переизобрели именно что кватернионы. Расходимся.
Полный базис - это 8 матриц. Матрицы Паули, единичная матрица, и все они, умноженные на мнимую единицу.
Кватернионы - это четная подалгебра, как раз именно в геометрической алгебре они получаются очень просто и естественно.
Я вам привел ссылку из википедии. Там написано, что:
Матрицы Паули вместе с матрицей σ0 образуют базис в пространстве всех эрмитовых матриц 2×2 (а не только матриц с нулевым следом).
А матричное представление алгебры Клиффорда в 3D - это все комплексные матрицы 2 на 2, не только эрмитовые.
Эрмитовые являются представлением ее четной подалгебры.
А зачем вам все? Чтобы "ваши" правила умножения имплементировать, достаточно эрмитовых,
P.S. Вы не могли бы еще привести ваши определения бивектора и мультивектора, а то в статье я их не нашел.
Есть там эти определения:
Этот объект I = e₁e₂ называется бивектором. Он не стрелка. Он — сама ориентированная плоскость e₁e₂.
Наше геометрическое произведение ab — это мультивектор
Как я понял, "мультивектор" - наиболее общая форма элемента этой алгебры (с любыми ненулевыми компонентами)
Хотелось бы уточнений:
3e₁e₂ - тоже бивектор, или уже нет?
2e₁e₂+7e₂e₃ - бивектор?
если да, то "бивектор" - это форма мультивектора, в которой ненулевые только слагаемые со второй степенью компонент базиса.
Да, это всё бивекторы.
Есть там эти определения:
Нет, это не определения в математическом смыле. Я ожидаю что-то типа: есть 4х-мерное линейное пространствo с базисом e0=(1,0,0,0), e1=(0,1,0,0)... Пардон, что не в столбик. Сложение поэлементное, есть умножение на скаляр x*(a,b,c,d)=(xa,xb,xc,xd), Умножение с дистрибутивностью и ассоциативностю, задается на базисе по правилам кватернионов или матриц Паули e1*e2 = i*e3... Тогда бивектор, введенный в рассмотрение автором это: пусть первый вектор, это покампонентно (x1,x2,x3), второй (y1, y2, y3), тогда их бивектор, это (0, x1,x2,x3)*(0,y1,y2,y3). Раскроете скобки, увидите скаляр нулевым элементом, дальше i, умноженное на векторное произведение x и y.
Итого - изоморфность кватернионам. Вся статья.
Я ожидаю что-то типа: есть 4х-мерное линейное пространствo
Вы статью подгоняете под свои ожидания. У автора 3-мерное линейное пространство, над которым он построил 8-мерное множество (не факт, что линейное пространство, но если так, то будет вообще замечательно). И вектора исходного 3-мерного пространства, и их "алгебраические произведения", и скаляры, довольно причудливо ложатся в построенное 8-мерное множество. Что немаловажно, там есть замкнутое сложение и умножение.
Было бы интересно увидеть, как перемножаются в общем случае эти 8-компонентные векторы. Есть ли какая-то красивая формула, или это нудное раскрытие скобок, как с многочленами.
У автора 3-мерное линейное пространство, над которым он построил 8-мерное множество
Как, имея всего 4 базисных элемента, можно на них построить 8-мерное пространство?
Так 8 базисных элементов:
3 исходых вектора e₁, e₂, e₃
3 бивектора (просто говорим, что e₁e₂, e₂e₃, e₁e₃ - новые элементы, прошу любить и жаловать)
скаляр 1
псевдоскаляр e₁e₂e₃
3 исходых вектора e₁, e₂, e₃
e0 забыли, вместо которого просто единицу рисуют. Как в комплексных числах, и где я протупил, не поняв ответа @lgorSL.
3 бивектора (просто говорим, что e₁e₂, e₂e₃, e₁e₃ - новые элементы, прошу любить и жаловать)
псевдоскаляр e₁e₂e₃
Ладно, обозначим e1*e2 как e12 и так далее. Чему же они равны (покомпонентно)? Нет результата, нет умножения.
Ладно, обозначим e1*e2 как e12 и так далее. Чему же они равны (покомпонентно)?
e12 ничему не равен покомпонентно. Это просто новый символ, добавленный в базис элемент. На него можно натянуть геометрический смысл (про плоскость на векторах e1,e2), а можно не натягивать. Алгебре от этого ни тепло, ни холодно.
Не то спросил. покомпонентно это, естественно (0,0,0,0,1,0,0,0)
Чему равно произведение e12 на все элементы 8-и-мерного базиса?
Действуют обычные правила перемножения многочленов, плюс приколы с поглощением второй степени переменной (e12*e12=1), что не позволяет выйти за пределы нового базиса. Плюс антикоммутативность умножения.
То есть, умножая e12 на e3, получим e123.
e12*e23 = (e1*e2)*(e2*e3) = e1*(e2*e2)*e3 = e13
e12*5 = 5e12
и т.д.
Вот как ложатся исходные вектора на 8-мерное пространство:
Скаляр
1 = (1, 0,0,0, 0,0,0, 0)
Вектора
e1 = (0, 1,0,0, 0,0,0, 0)
e2 = (0, 0,1,0, 0,0,0, 0)
e3 = (0, 0,0,1, 0,0,0, 0)
Бивектора
e12 = (0, 0,0,0, 1,0,0, 0)
e23 = (0, 0,0,0, 0,1,0, 0)
e31 = (0, 0,0,0, 0,0,1, 0)
Да, только я бы обозвал 1 как e0. Чуть меньше путаницы. Но теперь нам еще нужна полная матрица e[i]*e[j]. Пока мы знаем её только для 0 <= i <= 3 и 0 <= j <= 3. Т.е. для левой верхней ее четверти. В статье ведь ее нет?
Можно записать всю "таблицу умножения" 8x8, используя правила перемножения как с многочленами + сокращения квадратов, как я написал в примере выше. Но это очень рутинно. Одиночные примеры, типа e1e2 = e12, в статье приведены в избытке.
Поэтому я и спрашивал, есть ли красивая формула, возможно в матричном виде, которая двум 8-векторам сомножителям поставит в соответствие 8-вектор произведение.
Но это очень рутинно.
Угу, а автор сопротивляется. Можно, конечно, попробовать Maple использовать, но я его давно не запускал. Ладно, предположим, сделали. Теперь второй вопрос, как кинуть два трехмерных вектора в это пространство, так, чтобы после умножения получить 4 числа, (скалярное произведение и векторное).
Поэтому я и спрашивал, есть ли красивая формула, возможно в матричном виде, которая двум 8-векторам сомножителям поставит в соответствие 8-вектор произведение.
Тут ниже ссылку на github дали. В pypi - clifford. Но мне пришлось сначала последнюю бета-версию numba поставить для 3.14. Там если такой скрипт запустить:
Скрытый текст
import re
from clifford import Cl
from clifford.g3 import *
def extract_name(s: str) -> str:
return match.group(1) if (match := re.match('\\(1\\^(\\S+)\\)', s)) else s
def extract_product(s: str) -> str:
return f'{match.group(1)}{match.group(2)}' if (match := re.match('(-*)\\(1\\^(\\S+)\\)', s)) else s
def main() -> None:
basis = [1, e1, e2, e3, e12, e13, e23, e123]
for i, ei in enumerate(basis):
for j, ej in enumerate(basis):
print(f'{extract_name(str(ei))} * {extract_name(str(ej))} = {extract_product(str(ei*ej))}')
print()
if __name__ == '__main__':
main()то так получается:
Скрытый текст
1 * 1 = 1
1 * e1 = e1
1 * e2 = e2
1 * e3 = e3
1 * e12 = e12
1 * e13 = e13
1 * e23 = e23
1 * e123 = e123
e1 * 1 = e1
e1 * e1 = 1
e1 * e2 = e12
e1 * e3 = e13
e1 * e12 = e2
e1 * e13 = e3
e1 * e23 = e123
e1 * e123 = e23
e2 * 1 = e2
e2 * e1 = -e12
e2 * e2 = 1
e2 * e3 = e23
e2 * e12 = -e1
e2 * e13 = -e123
e2 * e23 = e3
e2 * e123 = -e13
e3 * 1 = e3
e3 * e1 = -e13
e3 * e2 = -e23
e3 * e3 = 1
e3 * e12 = e123
e3 * e13 = -e1
e3 * e23 = -e2
e3 * e123 = e12
e12 * 1 = e12
e12 * e1 = -e2
e12 * e2 = e1
e12 * e3 = e123
e12 * e12 = -1
e12 * e13 = -e23
e12 * e23 = e13
e12 * e123 = -e3
e13 * 1 = e13
e13 * e1 = -e3
e13 * e2 = -e123
e13 * e3 = e1
e13 * e12 = e23
e13 * e13 = -1
e13 * e23 = -e12
e13 * e123 = e2
e23 * 1 = e23
e23 * e1 = e123
e23 * e2 = -e3
e23 * e3 = e2
e23 * e12 = -e13
e23 * e13 = e12
e23 * e23 = -1
e23 * e123 = -e1
e123 * 1 = e123
e123 * e1 = e23
e123 * e2 = -e13
e123 * e3 = e12
e123 * e12 = -e3
e123 * e13 = e2
e123 * e23 = -e1
e123 * e123 = -1
А дальше вот что. Если кидать 3D вектора в базис (e1,e2,e3) то их прозведение оказывается в базисе (1,e12,e13,e23). Если умножать такие объекты, то они в этом базисе и остаются. Причем правила те же, что и для кватернионов.
И автор, вообще нехороший человек. Упомянул про алгебру Клиффорда только в списке тегов. В тексте - нет. Некрасиво.
Это распечатали "таблицу умножения". А вот делает ли библиотека "раскрытие скобок", или какую-то более простую операцию, непонятно. Разбираться в коде неохота. Спрашивал, может автор знает более простой способ перемножить.
А вот делает ли библиотека "раскрытие скобок", или какую-то более простую операцию, непонятно.
Делает, если я вас провильно понял. Пишете x*y или x^y и получаете ответ, разложенный по базису. Не быстро и с PyCharm не очень дружит. Там как-то хитро импорт устроен, динамически через вызов функции из
`__init__`.
Нет тут никакого e0.
"Чему же они равны (покомпонентно) ?"
Это очень простой вопрос. Вот ответ:
e1 = e1
e2 = e2
e1*e2 = e12
Из базовых правил видно, что оно линейное. Более того, все геометрические преобразования, которые описывают все мультивекторы в 3D - это линейные преобразования пространства.
"8-мерное множество (не факт, что линейное пространство, но если так, то будет вообще замечательно). "
Оно не просто линейное пространство, я в статье доказал, что там все базисные элементы обратимые и причем это обращение элементарно устроено.
Но если брать не базисные элементы, а смешанные, то там есть делители нуля и тому подобные вещи.
"Было бы интересно увидеть, как перемножаются в общем случае эти 8-компонентные векторы. Есть ли какая-то красивая формула "
На это есть ответ. Никакой красивой формулы нет.
Если я так буду писать, то почти никто ничего не поймет, жанр статьи тут - популярная. Написано так, чтобы детям было понятно
Если я так буду писать, то почти никто ничего не поймет, жанр статьи тут - популярная. Написано так, чтобы детям было понятно
То-то вы написали настолько просто, что представить код, имплементирующий вашу логику, сами не можете.
То-то вы написали настолько просто, что представить код, имплементирующий вашу логику, сами не можете.
Вы прикалываетесь?
https://github.com/topics/geometric-algebra
Либы на любой язык программирования и вкус.
Где вы были вчера? :)
Вы прикалываетесь? https://github.com/topics/geometric-algebra Либы на любой язык программирования и вкус.
Пардон, а вы не знаете, как это чудо с PyCharm'ом подружить. Там так альтернативно импорт устроен, динамически через вызов функции, что весь code inspection идет лесом.
Легко убедиться, что изоморфности кватернионам нет. e1^2 = 1, а мнимая единица в квадрате дает -1. Зачем вообще вы вспоминаете кватернионы тут в этом контексте?
У меня дано универсальное правило умножения векторов, из которого далее следует, как построить умножение любых объектов и в любой размерности пространства. А эрмитовы матрицы задают правила умножения бивекторов, причем только в 3D (в большей размерности так уже не работает).
У меня дано универсальное правило умножения векторов, из которого далее следует, как построить умножение любых объектов и в любой размерности пространства
Пальцем покажите, пожалуйста.
В самом начале статьи. Вы в комментариях почему-то упорно пытаетесь очень простые и наглядные вещи выражать через абстрактные и сложные. А суть ведь в том, что геометрическая алгебра - это очень просто, намного проще абстракций линейной алгебры.
Умножение двух любых разных базисных векторов антисимметрично, умножение на себя дает квадрат длины, эта операция определена так, что она обратимая и линейная. При этом все действия имеют очень наглядный геометрический смысл и тут расписано это с картинками. Всё!
Не нужно никаких многомерных пространств, матриц, тензоров и прочих куда более сложных вещей. Всё, что вы тут упоминаете - намного более сложный материал для восприятия, чем тот, что я тут популярно объяснил.
Это как пойти в школу и 7-классникам школьную алгебру через квантовую механику объяснять - вот что вы предлагаете.
а можно коротенько - в чем тут смысл? обычно математические операции создают для того, чтоб отображать ими реальные физические процессы, конструкции , и действия... например , евклидово пространство действительных чисел используют чтоб описывать им реальное физическое пространство (эфир, которого как бы нет), обычные математические операции годятся для учёта и описания перемещения и взаимодействия в нем макро-объектов, для микро мира используют волновые функции обьемной энергии (или плотности вероятности кому как нравится), и.т.д. векторное произведение хорошо описывает силу кориолиса, электромагнитные взаимодействия токов, комплексные числа подходят для кодирования фазовых сдвигов, и уравнения шредингера...(до сих пор мне непонятно кстати, свидетельствует ли комплексная плоскость времени данного уравнения, о реальном наличии физического дополнительного измерения на малых масштабах, или это избыточное описание для удобства вычислений). но возвращаясь к вашему векторному умножению (опять таки в двух словах) - какие реальные процессы и явления будет удобно им описывать, или какие цели и размышления натолкнули вас на создание такого экзотического мат.аппарата (?)
обычно математические операции создают для того, чтоб отображать ими реальные физические процессы, конструкции , и действия...
нет, конечно же. в подаляющем большинстве случаев математические операции «создают» just for fun, а потом им находят практическое применение. или не находят ;)
обычно математические операции создают для того, чтоб отображать ими реальные физические процессы, конструкции , и действия...
Нет же. Псевдоримановы пространства были придуманы существенно раньше общей теории относительности.
Чтобы описывать любые геометрические преобразования и физические процессы.
Объедение скалярного и векторного умножения есть ещё с момента их возникновения, поскольку весь векторный анализ, как и само понятие это плод кватернионов. Собственно скалярное и векторное умножение есть части кватернионного, которое в отличие от векторного, кстати, ассоциативно. А сам кватернион можно представить как сумму скаляра и вектора. В связи с этим мне очень понятна такая цель как объединение двух умножений, особенно с мотивацией упрощения, ведь они разъединились дабы быть проще.
Тут цель же в начале написана: чтобы с векторами работать не только в трёхмерном пространстве. В самом обычном 4-мерном евклидовом пространстве векторного произведения нет, кватернионами ничего описать нельзя, и пентанионов нет.
С кватернионами проблема в том, что непонятно, почему они такие, откуда все эти правила. А здесь всё понятно - вот есть отражения, их композиция поворот и т.п.
Все формулы из понятных базовых правил расписываются.
У кватернионов же сразу не очень понятные формулы.
Ну и да, круто то, что нет никакой привязки к размерности пространства.
С кватернионами проблема в том, что непонятно, почему они такие, откуда все эти правила.
А с законами физики понятно, почему они такие и откуда все эти правила?
Ну почти да. Несколько симметрий, чуток геометрии, гравитация и электромагнетизм.
Или. Там, где гравитация, симметрий уже нет.
Не вполне понятно как это обобщается на дифференцируемые многообразия и получается ли что-то лучше, чем тензорный анализ и дифформы. Векторы в физике -- это обычно не векторы, а векторные поля в криволинейном пространстве.
Спасибо за написание базового туториала! Статью про уравнения Максвелла пришлось целый день в голове крутить, пока уложилось. При наличии этой статьи оно сразу укладывается, как надо, в процессе прочтения.
Судя по комментариям, этот базовый еще недостаточно расписан.
Например, не расписал про дистрибутивность, а также как упрощать мультивекторные выражения, используя эти правила.
Тут еще спрашивают "что объект этого действия". А ведь важно то, что объектом этого действия является любой другой объект геом.алгебры, а также само пространство целиком.
Но |a||b|cos(θ) — это же в точности скалярное произведение a·b!
Я не очень понял. Мы же, вроде, вводим скалярное произведение с нуля, а тут вдруг, словно из воздуха это решение возникло, решили переобозначить умножение трёх действительных чисел...
Обыватель — вращение вокруг оси
Математик — вращение в плоскости!
Слишком много букав в комментах, пожтому если вопрос уже прдняли, прошу прощения.
Автор предлагает рассматривать объекты как операторы, и произведение операторов - это оператор - результат последовательного применения первоначальных. И тут он вводит вектара как операторы, но их произведение - это уже скаляр, совсем другого вида оператор. На этом читать перестал. Уж простите, времени жалко.
Автор излагает свою идею несколько странным языком. Недостаточно строгие и точные формулировки для математики. Это вызывает недопонимание.
У автора в профиле написано - "Увлекаюсь взаимодействием с LLM (Gemini)". Похоже что слишком увлекся. Они с LLM отлично понимают друг друга. Но читатели статьи уже не очень их понимают.
"И тут он вводит вектара как операторы, но их произведение - это уже скаляр, совсем другого вида оператор. На этом читать перестал. "
Произведение вектора на вектор - это сумма скаляра и бивектора. Это тоже оператор.
Как раз я тут подробно и анализирую, что из себя он представляет.
Их произведение - это композиция двух операторов как раз.
Если время это вектор, то бишь зеркало, то реальность это его отражение, тогда есть и симметричная реальность, как организовать переход оси симметрии из одной реальности в другую?
Визуально представляя - вектор - это стрела (одномерное направление), а бивектор - это бивень (с толщиной но имеющий тоже направление).
Можно так представить?
Можете пожалуйста привести пример нескольких задач, которые не решаются или плохо решаются традиционной векторной алгеброй, но решаются геометрической алгеброй? Лучше даже отдельную статью написать, а то пока не очень понятно, где все это нужно (кроме ОТО).
В линейной алгебре, когда вводят векторное произведение для 3д, есть понятие "правого базиса" и "левого базиса", потому что определить его можно и так и сяк. И ещё для чего-то кроме 3д векторное произведение не работает (ни для 2д, ни для 4д), потому что только в 3д у нас три степени свободы перемещения и 3 степени свободы вращения и это позволяет нарисовать "ось вращения". В 2д будет 2 перемещения и 1 вращение, в 4д - 4 перемещения и 6 вращений.
В геометрической алгебре вместо векторного произведения будет геометрическое, которое даёт бивектор, и его размерности очень хорошо со всем совпадают.
Ещё можно в линейной алгебре заметить, что векторное произведение не совсем "правильный" вектор - потому что если, допустим, умножить исходные вектора на матрицу, то векторное произведение надо будет умножать на другую матрицу. Для вращения они совпадут, для масштабирования - нет.
Ещё если взять кватернионы и сравнить их с матрицами вращения - когда в матрице копятся ошибки вычисления, нужно делать не очень очевидные штуки типа ортогонализации Грамма-Шмидта, а кватернион можно просто привести к единичной длине.
Кватернионы проще интерполировать или возводить в вещественную степень, чем матрицы.
интересно, а как это ложится на вычисления на компьютерах? если там все усложняется, то на компах все равно будут считать по старым схемам.
Здесь описывается другой способ представления тех же самых вычислений. Сами вычисления, при этом, никак не меняются. В компьютерах, в любом случае, перемножаются и складываются числа. Ничего другого обычный компьютер делать не умеет. В регистры процессора нельзя положить геометрический объект, только число. Как аналогия, если написать вычислительный скрипт на Питоне с использованием библиотеки NumPy, а потом тот же самый алгоритм самостоятельно реализовать на C, то выглядеть написанные программы будут совершенно по разному (на Питоне это может быть просто вызов одной библиотечной функции). Но компьютер, в итоге, будет выполнять ровно одни и те же вычисления.
Алгебра Клиффорда - восьмимерная. Кватернионы четырехмерные...
Алгебра Клиффорда - восьмимерная.
Посмотрите мои последние две статьи, восьмимерность чисто математическая. Для плоскости, совсем не сложно, четыре математических измерения сводятся к двум физическим. Для 3D задачка интерпретации посерьезнее, но уже понятно, что со временем удастся перейти от предположений к конкретике, либо я, либо Игорь, либо кто то еще эту задачу расколет.
Впервые дошло, что ГА - это "возьмем некоммутативное произведение векторов, приравняем коммутативному (скалярному) и посмотрим, что из этого выйдет". И в целом это даже не вызывает отторжения в отличие от "возьмем и сложим скалярное и внешнее произведения", хотя, как показано, - оба постулата эквивалентны.
Еще бы найти какую-то геометрическую интерпретацию произведения точек (в аффинной геометрии вектор - это разность точек), чтобы убедиться, что в центре находится геометрическое умножение, а "остальные планеты движутся вокруг".
Аффинная геометрия содержится в проективной геометрической алгебре (PGA) - алгебре Клиффорда с одним дополнительным вырожденным измерением, т.е. таким что
.
Геометрическое произведение точек в PGA - это мотор (так в PGA называют роторы), который соответствует операции параллельного переноса, который переносит первую точку во вторую (ну почти, на самом деле это его квадрат).
Внешнее произведение - прямая проведенная через эти две точки.
А, "вырожденное измерение" - это видимо то, что я называю нуль-вектором, - ортогонален всем векторам пространства, но его норма в плоском пространстве равна 0.
Попытался выяснить у дипсика, чему соответствует в ГА граничный оператор - взятие границы симплекса. Ну, например, стандартная граница треугольника: d(A^B^C) = A^B - A^C + B^C.
Он вначале уверенно заявил, что это скалярное умножение на этот самый "нуль-вектор". Но после уточняющих вопросов сдулся, и заявил, что "вопрос сложный". Может, вы в курсе? - наверняка должно быть что-то простое.
Понижение ранга делается с помощью внутреннего произведения. Но что нужно получить здесь?
Давайте попробуем получить то же самое. Например, пусть эти A - это базисные векторы. Тогда просто нужно слева умножить на сумму базисных векторов с помощью. внутреннего произведения. А поскольку любое внешнее произведение векторов в ГА - это определитель умножить на произведение базисных векторов, то можно это использовать, чтобы определить дальше. К сожалению, так не работает в произвольном случае.
Подход должен быть другим. Вы сами эти А должны определить как базисные векторы. Алгебра Клиффорда такое позволяет - скалярное произведение можно иначе определить.
Вообще формально понижение порядка симплекса можно реализовать через внешнее умножение на "обратные элементы". Которые определяются как A^(/A) = 1. Тогда можно умножить симплекс на сумму обратных вершин и получить его границу:
(A^B^C) ^ (/A + /B + /C) = (A^B^C)^/A + (A^B^C)^/B + (A^B^C)^/C = (A^/A)^B^C - A^(B^/B)^C + A^B^(C^/C) = B^C - A^C + A^B
Надо посмотреть, можно ли эти "обратные элементы" как-то связать с "обратными векторами" в ГА.
d(A^B^C) = A^B - A^C + B^C
Я позапускал численно, выглядит как будто это бивектор, у которого длина равна удвоенной площади треугольника.
Если я пробую сместить все три точки, ответ не меняется, если точки лежат на одной прямой, то ответ нулевой.
pga3d::Point a{0.0, 0.0, 0.0};
pga3d::Point b{2.0, 0.0, 0.0};
pga3d::Point c{0.0, 1.0, 3.0};
И если вывести d(a^b^c) и саму a^b^c, то получается так:
Bivector{.wx = 0, .wy = -6, .wz = 2, .xy = 0, .xz = 0, .yz = 0}
Plane{.x = 0, .y = 6, .z = -2, .w = 0}
Последние три компоненты в бивекторе как будто всегда нулевые, а первые три очень похожи на компоненты плоскости (которые заодно - нормаль к ней).
Если все три точки сместить, то меняется w у плоскости, а всё остальное такое же.
Аналитически попытался доказать, но где-то ошибся и не получилось.
это мотор (так в PGA называют роторы), который соответствует операции параллельного переноса, который переносит первую точку во вторую (ну почти, на самом деле это его квадрат).
Оооо, прикольно, я только сейчас это заметил. Т.е., мотор можно описать и как два отражения от плоскостей (что я знал), и ещё как два отражения относительно точек!
Я придумал излагать через идею "а давайте попробуем ввести обратимое умножение, квадрат которого дает длину вектора". Вторая идея - это зеркала.
Обычно везде, где видел, излагают куда абстрактнее, и сходу непонятно. что это.
Ну про один единственный постулат Вы приукрасили всё же. По ходу доказательства свойств в разных местах неявно и явно используются ассоциативность геометрического произведения и его линейность.
Уровень чтива помечен как Простой хе-хе
Можно ли определить функции над мультивектором через разложение в степенной в ряд?
Да, и ряд в итоге сведется к этому, функция от любой комплексной матрицы 2х2 выглядит как сумма четной части ФКП умноженной на единичный скаляр и ее нечетной части умноженной на единичную векторную часть https://habr.com/ru/articles/874600/
Можно. Например, кватернион - это экспонента бивектора.
q = exp(b) = 1 + b + b2/2! + b3/3! + ... = cos(|b|) + b * sin(|b|) / |b|
И например если писать уравнения движения тел вида q y q{-1}, то их можно дифференцировать, единственное важное отличие - из-за некоммутативности производная "слева" и "справа" будут нести разный смысл. Типа переход q -> (1 + db) q это добавление вращения во внейшей системе отсчёта (после примненения q), а переход q -> q (1 + db) это добавление вращения в "локальной" СО, поверх которого применят q, и эти db будут разные
Как мне кажется, те, кто нормально воспримет идею вектора как зеркала, уже и так хорошо знакомы с векторным и скалярным произведениями.
А идея переизобрести умножение рациональна лишь в том случае, если новая операция станет проще. В усложнении нет смысла.
тогда можно пойти дальше, не указаывая углы, просто задать стартовый базис 1 1 1, и поворачивать от него, но всё равно тогда надо как-то определять поворот первый ) при переносе модельки хотябы если 3д рассматривать из программы в софт, ну да мы перестали пользоваться косинусами и синусами задав в обратном порядке зацепку на базис, но найти его хотябы раз придётся я считаю
и вот оно то что вы рассказываете частично рядом с кватернионами, в общем там есть в кватерах где такое перемножение покомпонентное в кватернионе и делается
https://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/transforms/index.htm а в поворотах всё равно угол определить придётся, в роторы я пока не смотрел, но обзор попадался давно на глаза
вот LookAt если смотреть с базисами
3 вектора верх, право, прямо и базис -> и большая формула в матрицу, а угол задали в начале например
Почему, если ГА и проективная ГА(упомянул @lgorSL в комментарии) настолько хороша, то её не изучают раньше?
Автор, я когда-то давно некоторое время читал про кватернионы и их повороты, пытаясь понять как работает вот эта магическая функция поворота 3д точки с помощью кватерниона . Вот сам разбирал и доказывал , так как функция красивая (малое количество операций). Там тоже видно , что она может быть левой-правой
Можешь мне объяснить , твое объяснение через отражения, оно даёт какое-то новое понимание, новые формулы? Или как бы просто объясняет почему так все выглядит?
Если честно не знаком с матрицами Паули , но все формулы будто ничем не отличаются от i^2=j^2=k^2=-1 из статьи, что я пользовался.
Короче вот статья (там правда немного мутно в конце про объяснение метода уже в самом конце).
https://habr.com/ru/articles/426863/
А вот моё док-во той функции, если интересно
https://drive.google.com/drive/folders/1o0375a6MKJ8co9dgfLznIYqos2HzM4XK
Ну т.е. мне твой взгляд в статье нравится, но он вносит какие-то новые формулы, или упрощает восприятие пока только?
Кватернионы дают только повороты в 3D. Тут не только повороты описываются, но и произвольные движения, в том числе несобственные, а формулы совершенно одинаково в общей форме пишутся в любой размерности пространства.
Кроме того, можно метрику изменить (например, пространство Минковского рассмотреть) и нет никакой проблемы те же бусты Лоренца описывать, и тому подобное.
Наконец, если изменить формулу скалярного произведения, можно описывать это всё в пространствах с произвольными квадратичными формами, не только диагональными.
Блин, интересно, но уже сложно) я попробую запомнить, но пойму попозже))
Давно хотел спросить умного человека из математики такой вопрос, на другую тему.
Есть же всякие тригонометрические функции, и всякие арксинусы и т.д. их ввели через разные определения. И вот насколько знаю, формулу для периметра эллипса не вывели (она там либо бесконечные многочлены либо..)?
А почему для этого просто не ввели ещё одну формулу. Назвать её не cos() , а э() например , и определить как "длина дуги четверти эллипса". Но аргументом такой функции будет число отношения одного основания на другое (причем 'а' меняется от 0 до 1, а 'b' зафиксируем как 1). Ну типа отношение всегда меньшего к большему основанию. Т.е. на арктангенс что-то визуально похожее, только связывает рациональную 1 и иррациональную Pi/2 (ну или Pi). Такой вот плавный переход от одной к другой. Тогда бы можно было б спокойнее писать длину всей дуги эллипса как 4*э(a/b) , а Pi могло бы быть как 2э(1) . Ну или покрутить немного по-другому эту идею. Суть как бы в том, чтобы не пытаться прям обязательно её посчитать, а принять, что она есть, что известна и посчитаны ее значения, и уже использовать для чего-нибудь.
Нигде не было похожих идей или уже сделано в каком-то виде, или это непрактично? Интересно это или нет? Если будет возможность - чиркани в тг @vityo , а то у меня тут кулдаун большой


Вывели, и называется она - эллиптический интеграл.
тоже тут недавно пришлось допонять нюансы, кароче что я понял, кватернионы и отражения идут рука об руку, тоесть спинор отразится в определенный момент, тоесть кватернион при определенных условиях, если ориентацию ведем в CCD to end collision кватернионом он проявит свойство отражения ну я так понял, а так вообще в кватернионах https://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/transforms/index.htm например, тут нотируется сравнение с отражением
Скрытый текст
у меня так получилось
rotateOrientationFromCurrentTo(q,q1){
return q*inverse(q1);
}
...
указываем начало углом(1 итерация)
glm::quat pitchQuat = glm::angleAxis(glm::radians(a.rA.x), glm::vec3(1.0f, 0.0f, 0.0f)); // типо прямо
glm::quat yawQuat = glm::angleAxis(glm::radians(a.rA.y), glm::vec3(0.0f, 1.0f, 0.0f));
glm::quat combinedRotation = yawQuat*pitchQuat;
glm::quat final = rotateOrientationFromCurrentTo(a.orientation,combinedRotation);
a.orientation = final;
a.front = a.orientation * glm::vec3(0,0,1);//!
начинаем ккд(1 итерация)
glm::vec3 directionToPlayer = glm::normalize(modelsOnLevel.instances[0].pos - a.pos);
glm::quat temp = glm::quatLookAt(directionToPlayer, glm::vec3(0,1,0));
glm::quat yawQuat = temp;
glm::quat combinedRotation = yawQuat ;
glm::quat final = rotateOrientationFromCurrentTo(combinedRotation,combinedRotation);
a.front = a.orientation * glm::vec3(0,0,1);//!
пока не конец(пока не конец)
glm::vec3 directionToPlayer = glm::normalize(modelsOnLevel.instances[0].pos - a.pos);
glm::quat pitchQuat = glm::angleAxis(glm::radians(a.rA.x), glm::vec3(1.0f, 0.0f, 0.0f));
glm::quat temp = glm::quatLookAt(directionToPlayer, glm::vec3(0,1,0));
glm::quat current_quaternion = a.orientation * glm::vec3(0,1,0);
glm::quat yawQuat = temp;
glm::quat combinedRotation = yawQuat *pitchQuat;
glm::quat final = rotateOrientationFromCurrentTo(current_quaternion,combinedRotation);
a.orientation = final;
a.front = a.orientation * glm::vec3(0,0,1);//!
...
если конец переходим в указание угла(переход в начало)и вот тут они повернутся когда надо в обратку без явного указания -1 или +1, ИИ тут мало поможет она почему-то путается
Статью оценить не могу. Так как квалификации не хвататет. Но замечу что тем лекторам, которые определяют скалярное произведение через косинус "гореть в Аду". Мне очень нравится как скалярное произведение определено у Serg Lang в его учебнике "Introduction to Linear Algebra".
Ну чтобы читать "Introduction to Linear Algebra" требуется намного более высокий начальный уровень подготовки, чем чтобы эту статью читать. Поэтому на эту книгу совсем нет никакого смысла ориентироваться, всё-таки это принципиально иной уровень сложности - там вузовская программа, а здесь лишь школьная планиметрия и алгебра.
Преимущество определения через косинус в том, что оно очень наглядное, хорошо заходит детям в 8-м классе. А через сумму координат как-то слишком абстрактно.


Давайте забудем всё про скалярное и векторное. Есть способ гораздо лучше