Rotor Reflect - Interactive demo of rotation via double reflection
Rotor Reflect — это интерактивная демонстрация того, как любое вращение вектора можно получить с помощью двух последовательных отражений. Проект наглядно показывает, что угол поворота равен удвоенному углу между осями отражения, и работает как в 2D, так и в 3D. В основе лежит геометрическая алгебра, а реализация не использует тригонометрические функции. Также доступен режим круговых отражений, который обобщает отражение от линии и позволяет выполнять масштабирование и трансляцию. Проект идеально подходит для изучения геометрических преобразований и визуализации абстрактных математических концепций.
Любое вращение можно получить с помощью двух отражений — и для этого не нужны синусы и косинусы!
- Sharlin
Для построения двух векторов, охватывающих заданный угол (ну, как сказано в статье, один из них можно выбрать произвольно, проще всего взять (1, 0)), вам, конечно, понадобятся тригонометрические функции. Это в точности эквивалентно тому, как построение матрицы поворота из угла требует тригонометрических функций, но после этого вы можете поворачивать сколько угодно векторов с помощью просто скалярных произведений, или как построение e^ai = sin(a) + cos(a)*i требует тригонометрических функций, но после этого это просто умножение комплексных чисел. Еще один забавный способ разложить двумерный поворот — на три сдвига, впервые предложенный Паэтом в 1986 году: https://silmon.github.io/arbitrary-image-rotation-using-shea...
- amluto
Раздел о размерностях вызвал у меня смутное ощущение «математической паранойи»: > Во время этого зигзагообразного движения по плоскости вектор по-прежнему вращается вдоль плоскости точно так же, как в двумерном случае выше. Что такое «плоскость»? В 2D есть одна единственная плоскость. В 3D каждое вращение происходит в двумерной плоскости и сохраняет проекцию исходного вектора на ортогональное дополнение этой плоскости (то есть расстояние до плоскости и то, на какой стороне находится исходная точка). В 4D и выше, увы, вся наша человеческая интуиция о 3D неверна. Вы можете вращаться в двух плоскостях одновременно, и это не эквивалентно вращению в какой-либо одной плоскости. И действительно, статья довольно близка к доказательству того, что конструкция не работает в 4+ измерениях. Отражение относительно гиперплоскости коразмерности 1 (т.е. гиперплоскости размерности n-1) меняет знак одного базисного вектора. Сделайте два таких отражения, и линейная оболочка этих векторов определяет двумерную плоскость, и вы получаете вращение именно в этой плоскости и никакой другой. И этого недостаточно для описания общего вращения. Конечно, в 4D существуют другие виды операций, похожих на отражение, например, как в 3D можно изменить знак координат x и y, оставив z без изменений. (Эта конкретная операция сама по себе является вращением и не меняет четность!) Я думаю, что если вы готовы соответствующим образом расширить идею «отражения», то можно породить все вращения в более высоких размерностях.
- kazinator
Обратите внимание, что для отражения жесткой физической модели двумерной формы вам придется вращать ее вокруг оси отражения в трехмерном пространстве. То есть отражение — это просто вращение с использованием временно заимствованного дополнительного измерения.