to post messages and comments.

@OCTAGRAM:

Площадь сферы в пространстве Лобачевского растёт сначала по квадратичному закону от радиуса, потом — по экспоненциальному. Может показаться, что, имея гигантскую площадь, сфера при этом становится крайне плоской. Но нет. Абсолютное значение кривизны Гаусса всегда выше, чем абсолютное значение кривизны пространства. Если бы они сравнялись, сфера выродилась в орисферу, а дальнейшее выпрямление соответствует эквидистантам. Так что сферы в гиперболическом пространстве могут быть сколь угодно большими и иметь экспоненциально большую площадь, но в каждой своей точке они «ощутимо» круглые.

Есть идейка взять да отрендерить следующую сцену:
1. Берём сцену из реального мира, например, сферическую панораму.
2. Вырезаем из этого пространства шар и отождествляем точки его поверхности с точками сферы в гиперболическом пространстве.
3. Гиперболическое пространство опционально замощается.

Из того, что я отрендерил в уме, следует, что при больших радиусах сферы относительно радиуса кривизны (скажем, радиус сферы 1.5 метра, а радиус кривизны внутреннего пространства — 3см) это получается банальное сферическое зеркало в большинстве своих точек, и только если пристально смотреть в центр сферы, там начинается переход, когда трассирующие лучи проваливаются всё глубже и выходят под всё меньшими углами относительно изначального направления. Можно подобрать такое соотношение и такое содержимое, чтоб было зрелищно в фантастическом фильме или игре.

@OCTAGRAM:

Геометрией мира де Ситтера, оказывается, давно занимается Ромакина Людмила Николаевна, или, в той терминологии, геометрией гиперболических плоскостей и пространств положительной кривизны. В том числе и вопросом замощения (в той терминологии разбиения). Вообще, я ожидал в её книжках увидеть картинку, способную дополнить это, ведь группа симметрий одинаковая, но нашёл там совсем другое. Возможно, геометрия пространства-времени де Ситтера не допускает продолжений чего-то, более сложного, чем прямая (времениподобная в той части, где это пространство-время де Ситтера).

@OCTAGRAM:

Начинает проясняться, как закольцовывать гиперболические плоскости и пространства. Пишут об этом, например, тут и тут. Пишут, что quotienting аналогичен тору, но представить это тяжело, поскольку числа у них получаются гигантские. Охватить разумом стыковку сотни тысяч клеток сложно, а меньше этого зациклить не получится. Глядя на {5,4}, хочется состыковать по прямым линиям, но с одной стороны прямая, а с противоположной — две пересекающиеся. Где здесь тор?

Проблема первая, — это то, что в вершинах сходится нечётное количество сторон, и нет явных прямых. Если есть явная прямая, то она делит гиперболическую плоскость на две части, и можно просто закрыть одну половину и не думать, как там ведут себя соседи соседей. Очень просто они себя ведут. Либо это соседи соседей на том участке, который просчитан перебором, либо прошло через прямую, и она как зеркало, там, по ту сторону всё аналогично.
Проблема вторая, — это то, что количество сторон многоугольников нечётное. Из-за этого нельзя пристыковать одну сторону к противоположной, как в торе. А если взять два пятиугольника, то сторон получается 6, но у противоположных сторон разная длина. И только если взять четыре пятиугольника, образующие вместе восьмиугольник, только тогда можно разглядеть тор.

Поняв это, лучше взять попроще, шестиугольник с одинаковыми сторонами в хорошем ракурсе. Аналогами тора для гиперболических пространств выступают торы с множествами дырок (больше одной). Обычные торы образуются квадратами, если склеить стороны. Тут — также, но многоугольники с чётным количеством сторон. Возможно, прямые углы тоже критичны. Шестиугольник с прямыми углами получается как раз такой, он сам по себе может зациклен на себя. Таких не нужно собирать несколько штук, чтоб они образовали удобную для зацикливания форму.

Если для обычного тора состыковать несколько его основ, например, из четырёх квадратов сделать квадрат больше, это основа для тора побольше. В гиперболическом пространстве примерно так же, только у тора ещё увеличивается количество дырок. И так, стыкуя основы тора с малым количеством дырок вместе и получая основы торов с большим количеством дырок, можно ввести иерархическую разметку на гиперболических плоскостях и полях, впрочем, тут, возможно, я что-то упускаю. Как я понимаю, основы торов стыкуются более предсказуемым образом по сравнению с «нехорошими» многоугольниками.

@OCTAGRAM:

Всё думал, как можно в космическом симуляторе сделать горизонт пространства Лобачевского. Может быть, пожертвовать реализмом (оставить без ответа вопрос, как оно так чётко выстроилось?) в пользу зрелищности. Горизонт пространства Лобачевского ведёт себя способом, очень похожим на масштабирование, и так я прихожу к идее сделать его фракталом. Во фракталах — самоподобие, а в пространстве Лобачевского — трансляция. Предположительно, так будет интересно находиться во всех точках пространства.

Аналогия, конечно, не полна. Если не делать выделенное направление, в пространстве Лобачевского лететь-то можно в любую сторону, и горизонт впереди будет разъезжаться, обтекать вокруг и сжиматься сзади. Вот и как тут сделать снежинку Коха или остров Госпера? Они дружат с масштабированием, но не с проективной геометрией.

Некоторую подсказку тут дают некомпактные замощения правильными многогранниками. Это когда многогранник уходит за горизонт во Вселенную де Ситтера, например, так. Видите, в горизонте есть что-то фрактальное. Другие некомпактные замощения часто изображаются только горизонтом: тут, тут или тут. И там в аккурат вместо масштабирования, как в обычных фракталах, — трансляция. Правда, в таком виде, как тут, это не со всех точек выглядит зрелищно, поскольку у многогранников есть полости, и если в них залететь и лететь, лететь и лететь, то всё некомпактное замощение сожмётся в малую точку на горизонте, и будет видно только пустоту.

Чтобы так не получалось, можно зеркалировать замощение относительно гиперплоскостей, от которых равноудалены вписанные и описанные вокруг многогранников гиперсферы. Впрочем, по разные стороны таких гиперплоскостей стыковать можно разные некомпактные замощения с разным цветом горизонта. Это может быть хорошей визуальной аналогией «областей пространства». Прилетел в другое место — горизонт выглядит по-другому.

Также можно попытаться спроецировать на горизонте продолжение замощения из Вселенной де Ситтера. Самостоятельно мне пока это сложно представить, а про замощения Вселенной де Ситтера правильными многогранниками не видел, чтоб где-то хотя бы писали, не то, что изображали.

@OCTAGRAM:

Размышлял, как бы реализовать координаты на плоскости и в пространстве Лобачевского. Проблема в том, что длина окружности растёт экспоненциально, и если это не учитывать, наивные попытки реализовать арифметику будут разваливаться на небольших расстояниях. Посчитать корень из (гиперболический косинус в квадрате минус гиперболический синус в квадрате) на хоть сколько-нибудь больших значениях аргумента и получить единицу крайне проблематично, ведь синус и косинус почти не отличаются.

Была мысль, что надо как-то замостить плоскость или пространство правильными многоугольниками или многогранниками, и внутри многогранников ввести координаты с плавающей точкой, а сами многоугольники/многогранники идентифицировать строками, длина которых растёт в зависимости от удалённости. И даже можно понять, как это сделать. Вводим на плоскости две матрицы поворота, одна — поворот вокруг начала координат (в пространстве нужно два поворота), другая — перемещение вдоль одной из осей вперёд так, чтобы начало координат перешло в соседнюю ячейку. Произведения этих матриц вида ABBBABBAB — это и есть искомые строки. В этой схеме получаются синонимы, в одну и ту же ячейку можно добраться разными путями. В тех гиперболических играх, что я видел, перебираются разные варианты в пределах некоторого удаления, полученные координаты сравниваются, погрешность не успевает стать значительной, и потом составляется карта всех ячеек. Каким-то образом, пишут, что похоже на тор, но мне пока не понятно, кусок плоскости замыкается на себя, и так получается замкнутое пространство, где все такие ячейки просто пронумерованы. Недостаток — малые линейные размеры. Что-то порядка миллиона ячеек при радиусе 13 получается, и чем больше радиус, тем хуже.

Вот этот скромный радиус и смущает. Если я, допустим, хочу делать не лабиринт, не судоку и не RPG, где нужно держать в памяти игровое поле, а что-нибудь космическое, мне какие координаты применять лучше? Долго напрашивался вариант с бесконечноугольниками. Они похожи на деревья, а пути в деревьях похожи на строки. То есть, если в каждой точке сходятся три стороны бесконечноугольников, на каждом шаге можно пойти направо или налево, и это можно описать битовой строкой, а дальше, добравшись до одной из сторон бесконечноугольника, можно двумя вещественными числами указать оставшиеся координаты. И из одной точки, заданной такими координатами, можно добраться до другой по примерно понятной схеме. Если они достаточно далеко, то с большой точностью разность путей по деревьям и будет указывать на кратчайший путь. Когда корабль пролетает мимо объектов, можно точно показывать направление и расстояние до них. Но по большому счёту офигеть можно всё это делать, тем более, если в 3D.

Какое-то время поразмышляв, начал приходить к мысли, что координаты из модели гиперболоида не так уж плохи, если запахать для них длинную арифметику. При радиусе 13 количество ячеек — миллион и с увеличением радиуса растёт по экспоненте, а количество операций для умножения таких длинных чисел растёт всего лишь квадратично. Радиус окружности на модельном гиперболоиде в аккурат совпадает с радиусом окружности в пространстве, и если на разных удалениях поддерживать одинаковое разрешение координат (без плавающей точки), то и гиперболическое пространство на удалении будет иметь примерно такое же разрешение, как и в начале координат. Меня смущало то, что при этом на удалении ещё и радиус начинает иметь экспоненциально хорошее разрешение, что некрасиво, несимметрично и выглядит как что-то лишнее. А теперь я ещё об этом подумал, и решил, что зато становится понятно, как делать все операции. На практике может оказаться, что на удалении надо наращивать память для хранения чисел в обе стороны от точки. Всё равно тогда рост квадратичный.

@OCTAGRAM:

Посмотрел на геометрию Римана и Лобачевского с точки зрения оптики. В геометрии Римана пространство работает как собирающая линза. Для любой точки, находящейся на экваториальной сфере вокруг наблюдателя, все лучи, испущенные оттуда, мимо наблюдателя будут проходить как параллельные. То есть, экватор воспринимается как горизонт. А то, что за экватором, должно у обычного человека начинать вызывать боль в глазах. Там и параллакс аномальный, и аккомодация — тоже. Лучи приходят в глаз сходящимися, что аномально для человека. За экватором лучи снова сходятся в противоположном наблюдателю полюсе и расходятся снова. Самые тяжёлые для наблюдения — это области, близкие к противоположному полюсу за экватором и немного после него. Собственно, если никакие обломки сильно не загораживают путь, то наблюдатель с точки зрения оптики не может отличить своё место от противоположного полюса. Он как будто находится в двух местах одновременно. После того, как луч света обогнул полюс и преодолел экватор второй раз, снова начинается область головной боли. И наконец, луч мог бы и пойти по второму кругу, если бы не мешал затылок наблюдателя.

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

Итого, в пространстве есть две области по 25%, вызывающие дискомфорт. То есть, половина всего объёма. Их положение зависит от направления взгляда. Если повернуться на 180 градусов, то эти области полностью поменяются. Всё это следует иметь в виду, когда вы рассматриваете видео вроде такого. Там линии за экватором изображаются так, как будто они двигаются в противоположном направлении, но на самом деле направление везде одно, и если правильно изобразить параллакс и аккомодацию, то голова бы болела, но для точек, незначительно ушедших за экватор, чувствовалось бы, что они двигаются в том же направлении.

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

@OCTAGRAM:

Набросаю-ка себе на будущее ссылок на замощения в пространстве Лобачевского. Вдруг игру соберусь написать
Order-4 hexagonal tiling honeycomb
Hexagonal tiling honeycomb
Square tiling honeycomb
Order-5 hexagonal tiling honeycomb

Для гиперболического пространства существует 11 паракомпактных замощений, то есть, там либо замощение бесконечногранниками, аналогичными замощениям Евклидовой плоскости, только описанными вокруг орисфер, либо вершины в идеалах с бесконечным количеством рёбер, либо то и другое. Вершины с бесконечным количеством рёбер я решил отбросить, из 11 осталось 4, их отсортировал в порядке убывания репрезентативности.