Гиперболическая геометрия — Блог optozorax'а

#Геометрия Лобачевского (гиперболическая геометрия)

Далее кратко будет называться просто гиперболика.

2D пространство с гиперболической геометрией обозначается как H2, аналогично 3D как H3. Обычное евклидово пространство обозначается буквой E, например: E, E2, E3, E4.

Здесь будет систематизироваться интересный материал из чатика: https://t.me/metageometria

#Теоремы и аксиомы этой геометрии

В обычной евклидовой геометрии есть 5 аксиом, из которых выводится всё остальное. И среди них есть пятая аксиома:

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

В гиперболике эта аксиома отрицается:

Через точку, не лежащую на данной прямой, проходят по крайней мере две прямые, лежащие с данной прямой в одной плоскости и не пересекающие её.

Ещё раз: здесь параллельные прямые не пересекаются! Они пересекаются в сферической геометрии.

Из этой аксиомы следует что через данную точку проходит бесконечно много прямых, не пересекающих данной. Изображается это так:

×1
png
Источник

Так же есть изображения, хорошо показывающие основные различия всех трёх известных геометрий:

×1
png
Источник

×1
png
Источник

#Книги

Книга Атанасян Л.С. Геометрия Лобачевского

Книга Прасолов В.В. Геометрия Лобачевского

#Визуализация

Если подумать: как нам визуализировать евклидову геометрию? Да очень легко! Просто берём 2D листок и рисуем на нём, ведь наш мир евклидовый! А гиперболическую геометрию так легко не получится, для неё надо придумывать особые проекции, которые искривляют прямые линии в округлые. Аналогично как перспективная проекция изменяет расстояния и размеры для трёхмерных объектов.

#2Диск Пуанкаре

На вики.

×1
png

#2Верхняя полуплоскость

На вики.

×1
png

Прямая представляется как полу-окружность, с центром на прямой y=0. Так, чтобы построить прямую по двум точкам, надо построить окружность по этим двум точкам. Благо ограничение с центром на прямой сокращает число неизвестных до двух. Либо это вертикальный луч.

Гиперболические окружности проецируются как окружности, но координаты центра и радиус рассчитываются по-другому: (x, y cosh(r)), r = y sinh(r)

Преобразование в диск пуанкаре делается с помощью cayley transform

Я даже визуализировал это здесь и здесь (немного другое преобразование для красоты).

#2Band model

×1
png
Источник

#2Рейтрейсинг

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

#2А что если

А что если спроецировать H3 при помощи перспективной проекции на кусок H2. Будут ли там прямые линии прямыми? Да и вообще, какая проекция H3 на H2 обладает максимальным количеством хороших свойств?

#Вычисления

Zeno Rogue советует эту стаью для расчётов в гиперболическом пространстве.

#2С чего я начинал

×1
gif

Статья, где очень хорошо объясняют как симулировать плоскость Лобачевского: Жизнь на плоскости Лобачевского . В ней есть ещё много чего интересного, например замкнутость пространства на самого себя, надо это изучить.

При помощи неё я нарисовал своё первое замощение и гифки интерполяции между моделью верхней полуплоскости и диска пуанкаре.

#2Движение на диске Пуанкаре

×1
png
Источник

Анимация движения по оси X.

А чтобы двигаться по оси с произвольным углом, надо просто перемножить эти матрицы так:

если обозначить первую матрицу как M(x), вторую как R(ф), то надо сделать матрицу

R(ф) * M(x) * R(-ф)

Анимация движения под 45 градусов.

#Замощения

Вы, наверное знаете, что обычное двумерное пространство можно замостить правильными многоугольниками:

×1
png
Источник

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

Происходит так потому что из 5 аксиомы следует, что треугольники равны, если равны их углы. В обычной же геометрии треугольники подобны, если равны углы. Из этого следует, что в гиперболике не существует подобия, и углы правильного многоугольника однозначно определяют его размеры.

За счёт этого можно разгуляться со всякими замощениями, изменяя размер фигур. Например у этого замощения угол в правильных пятиугольниках равен 90 градусов:

×1
jpg

Лекция про замощения на гиперболической плоскости:

#Игра на гиперболике

#2Майнкрафт

У меня есть желание сделать майнкрафт в H3, используя замощение пространства кубами {4, 3, 5}.

Сначала была идея сделать по горизонтальной плоскости H2, а по высоте -- обычное E, чтобы по высоте работало привычно нашему восприятию, то есть пространство H2×E. Но потом я понял, что это выглядит очень некрасиво: дальние предметы выглядят сжатыми по горизонтали и очень высокими. Выглядит это так:

Zeno Rogue H2×E video

VR implementation of H^2 x E geometry

Поэтому я решил, что это выглядит некрасиво, и я хочу сделать майнкрафт в пространстве H3. Гравитация там будет направлена по перпендикуляру к полу. Пол проведу примерно так.

Рендерить это можно при помощи рейтрейсинга.

#2Ограничения по памяти

Если в привычном нам евклидовом мире площадь окружности возрастает пропорционально квадрату от размера окружности, то в гиперболическом пространстве всё намного хуже:

Согласно этому источнику, там площадь окружности возрастает как:

S = 4 pi sinh2(r/2).

Для тех кто не знает, гиперболическй синус вычисляется так:

sinh(x) = (ex - e-x)/2.

А это значит что площадь окружности растёт примерно пропорционально квадрату экспоненты, а это очень много.

Если мы хотим хранить мир майнкрафта в виде блоков, то уже для окружности радиуса 30 у нас будет так много блоков внутри, что это не поместится ни в одну память персонального компьютера. К слову, для такого же количества блоков в евклидовом майнкрафте нам потребуется окружность радиуса 32 миллиона блоков.

Поэтому в гиперболическом майнкрафте мы не можем позволить себе такое удовольствие как генерация мира с возможностью его изменять. Нам придётся ограничиться:

  • либо плоским миром, где пользователь может поставить конечное число блоков;
  • либо автогенерируемым миром, в котором нельзя ничего поменять.

Второй пункт выбрала игра HyperRogue, но она находится на 2D плоскости.

#2Сжатость

Длина границы окружности в гиперболическом пространстве тоже измеряется через экспоненту:

L = 2 pi sinh(r)

А это значит, что на расстоянии 20 у нас будет помещаться примерно e20 блоков, следовательно вдалеке мы будем видеть мир очень сжатым. И движение по такому миру будет выглядеть не как обычное движение, а как зумирование, ведь всё будет очень быстро увеличиваться в размерах.

#Интересности

#2Дискретные координаты для замощений на гиперболической геометрии

Это три связанных статьи:

What does it mean to introduce coordinate system on a regular tiling?

Coordinate system for heptagonal tiling of hyperbolic plane

Adjacent heptagons on hyperbolic plane

×1
png
×1
png

Тоже что-то про дискретные координаты, чтобы не потерять

#2Демки на гиперболической плоскости

×1
png
Источник

×1
png
Источник

×1
png
Источник

Анимация движения объектов в замощении квадратами:

×1
png
Источник

#Мемы

×1
jpg
×1
jpg

#Несортированные ссылки

Крутая презентация про мапинг гиперболического пространства на разные фигуры.

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

Статья с красивыми картинками

Статья про вещественные координаты


Если вам нравится что я делаю, то подписывайтесь на меня в Telegram и YouTube.

Changelog

2021.08.26

Перевод этой страницы на новый блог на Zola.

2020.11.16

Перевод этой страницы на submodules + jekyll.

2020.01.06

Первая публикация.