Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 October 27

AZ

Alexander Zaitsev in RU Rust GameDev — русскоговорящее сообщество
(а то обвязки всякие чот лень самому писать)
источник
2020 October 28

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Про кватернионы. Тут просто спрашивали некоторое время назад.

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

1) Из отрицательных чисел нельзя взять квадратный корень. А это значит, что консистентно с действительной прямой мы можем ввести дополнительные числа, степень двойки от которых будут возвращать отрицательные значения. Смысл здесь не в том, что они возвращают минус один, а в том, что:

a) У нас "внутри" комплексного числа появляется два закодированных действительных. Причем кодирование нам позволяет при желании совершать обычные операции над каждым из двух действительных компонентов этого комплексного числа независимо.
b) Кодирование нам так же позволяет совершать операции и между двумя разными компонентами.
c) Закодировать мы можем два и более действительных числа, вводя более одного мнимого члена. В смысле что мы можем ввести такие i и j, что i !=j, но i^2=j^2=-1. Формально это не противоречит существующему в действительных числах аксиоматическому формализму.

Фактически это нам дает то, что мы можем кодировать просто обычные кортежи чисел. К примеру кватренион ai + bj + ck + d кодирует обычный кортеж (a, b, c, d). Ни больше, ни меньше. Как интерпретировать этот кортеж - это открытый вопрос. Его можно интерпретировать как угодно. В чистом виде это просто вектор из четырех компонентов, например.

2) И, например, его можно интерпретировать как оператор аффинного преобразования. То есть как вырожденный случай обычной трехмерной матрицы поворота по трем осям координат. Так в особенности удобно делать, потому что умножение двух комплексных чисел вида a + bi работает так же как умножение матриц вида:

a, -b
b,  a

Что соответствует матрице вращения вокруг оси, если заменить a и b на cos и sin угла поворота соответственно.

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

3) Выбор между кватернионным формализмом и матричным это по-моему просто вопрос вкуса. Все что можно задать комбинацией кватернионов можно так же задать комбинацией матриц поворотов. И наоборот.
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Разница в том, что в 3х мерном случае матрица 3х3 это поворот + масштаб по каждой оси + перекос. А в кватернионе (который ты интерпретируешь как поворот) есть только поворот
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
А баттл "роторы против кватернионов" кватернионы выигрывают по популярности, а роторы по применимости к любому количеству измерений.
источник

X

XÆA-XII in RU Rust GameDev — русскоговорящее сообщество
Roman
А баттл "роторы против кватернионов" кватернионы выигрывают по популярности, а роторы по применимости к любому количеству измерений.
Ещё же "понятность" у роторов
источник

X

XÆA-XII in RU Rust GameDev — русскоговорящее сообщество
Или такие же дебри?
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Кстати "трионов" вида a + bi + cj нормально не сделать, как и "квинтионов". Можно сделать только 2^n -1 мнимых чисел, что б задать над ними такую же алгебру. Иначе чему равно i * j если у нас только 2 мнимых единицы?
источник

MP

Mag Pie in RU Rust GameDev — русскоговорящее сообщество
источник

BD

Berkus Decker in RU Rust GameDev — русскоговорящее сообщество
Roman
А баттл "роторы против кватернионов" кватернионы выигрывают по популярности, а роторы по применимости к любому количеству измерений.
клево, есть правда одно маленькое но, но продолжайте!
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Я закончил :)
источник

X

XÆA-XII in RU Rust GameDev — русскоговорящее сообщество
Berkus Decker
клево, есть правда одно маленькое но, но продолжайте!
Какое?
источник

MP

Mag Pie in RU Rust GameDev — русскоговорящее сообщество
Roman
Разница в том, что в 3х мерном случае матрица 3х3 это поворот + масштаб по каждой оси + перекос. А в кватернионе (который ты интерпретируешь как поворот) есть только поворот
Кто использует для преобразований в движке матрицы 3х3? Везде же 4х4
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
4х4 нужны что б впихнуть туда смещение
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Если тебе оно не нужно, что достаточно 3х3
источник

RA

Roman Akberov in RU Rust GameDev — русскоговорящее сообщество
Roman
Кстати "трионов" вида a + bi + cj нормально не сделать, как и "квинтионов". Можно сделать только 2^n -1 мнимых чисел, что б задать над ними такую же алгебру. Иначе чему равно i * j если у нас только 2 мнимых единицы?
Что такое "нормально"? :) Да, алгебру с делением на R^3 не задать, но коммутативную вполне себе можно, и она "для некоторого определения нормальности :)" будет нормальнее кватернионов.
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Roman Akberov
Что такое "нормально"? :) Да, алгебру с делением на R^3 не задать, но коммутативную вполне себе можно, и она "для некоторого определения нормальности :)" будет нормальнее кватернионов.
Так а чему будет равно i*j?
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Получается что ты только сложение сможешь сделать определенным на всем пространстве чисел
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Я это имел ввиду под "нормально"
источник

s

suhr in RU Rust GameDev — русскоговорящее сообщество
Roman Akberov
Что такое "нормально"? :) Да, алгебру с делением на R^3 не задать, но коммутативную вполне себе можно, и она "для некоторого определения нормальности :)" будет нормальнее кватернионов.
Со свойством a_n^2 = -1 нельзя.
источник

s

suhr in RU Rust GameDev — русскоговорящее сообщество
источник