Он будет построен так же, как и второй: сначала картинки, потом некие объяснения про то, как они были получены. Тягомотность поста монотонно возрастает.
Картинки
Картинка № 1
Картинка № 1

Картинка № 2
Картинка № 2

Картинка № 3
Картинка № 3

Картинка № 4
Картинка № 4

Картинка № 5
Картинка № 5

Картинка № 6
Картинка № 6

Картинка № 7
Картинка № 7

Картинка № 8
Картинка № 8

Что это? (кратко)
Как известно, на стены и другие поверхности можно прикреплять кафельную плитку. Плитка при этом может быть одноцветной, что просто «окрашивает» поверхность в цвет плитки (с поправкой, возможно, на швы между плитками). Использование плиток разного цвета позволяет достичь большего разнообразия. Более того, на плитку можно нанести какой-нибудь узор. Тогда на поверхности можно получить некую картину, вообще говоря, более сложную, чем узор на каждой отдельной плитке. Например. Так, вот здесь на каждой плитке нарисована четыре четверти круга по углам; когда их складывают вместе, они образуют цельный круг:
В приведенных замощениях всё на этих четвертинках, грубо говоря, и построено.
Представленные в начале поста картинки есть не что иное, как подобное замощение плиткой. Не больше и не меньше. Замащивается в нём так называемая модель Пуанкаре в круге. Процесс замощения этого круга идеологически ничем не отличатся от процесса замощения, скажем, кафелем стенки в ванной. С технической точки зрения отличие здесь ровно одно: если на поверхности стенки в ванной действует евклидова геометрия, то в диске Пуанкаре действует гиперболическая геометрия, или, если угодно, геометрия Лобачевского.
Как это? (длинно)
Вообще, существует очень много разных и интересных способов замостить евклидову плоскость (и не только её). Для картинок из поста был использован один один-единственный метод, очень простой. Изначально берется ровно один многоугольник (будем называть его фундаментальным регионом), который затем отражается относительно каждого из своих ребер. Такой метод еще иногда называют «калейдоскопом», что, наверно, не совсем корректно с точки зрения оптики. Для того, чтобы многоугольник не наложился сам на себя, мы будем использовать только выпуклые многоугольники. Например, можно взять хорошо известный по школе треугольник с углами в 90, 30 и 60 градусов:

Зеленым отмечена исходная фундаментальная область, порождающая свои отражения.
Такой трюк можно провернуть и с многоугольником с любым другим число сторон; вся проблема здесь в углах. Их, к сожалению, нельзя задавать от балды, иначе многоугольники начнут налагаться друг на друга, и получится месиво (здесь углы 90, 22.5 и 67.5 градусов):

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

Таким образом, если многоугольник претендует на то, чтобы быть фундаментальным регионом, 2π (360 градусов, полный оборот) должно нацело делиться на каждый из его углов. Кроме того, на плоскости сумма углов любого n-угольника должна точно равняться π*(n-2) радиан, что, увы, не позволяет выбирать углы независимо друг от друга и сильно ограничивает возможные варианты.
Модели, как известно, бывают радиоуправляемые, на каблуках, из спичек и математические. К последним относятся, например, «модель бесконечно расширяющейся вселенной» и «модель теплоизоляционного однородного стержня». Грубо говоря, обычно это набор формул, описывающих некий реальный объект. Ну, или не очень реальный. В нашем случае --- вообще воображаемый.
История возникновения неевклидовой геометрии не только весела и увлекательна, но и очень широко освещена в литературе. Наверно, даже я могу настрочить на эту тему научно-популярный текст. Вкратце: в евклидовой (параболической) геометрии есть так называемый Пятый Постулат (утверждение, принимаемое без доказательств), одна из эквивалентных формулировок которого звучит так:
Е5. В плоскости через точку, не лежащую на данной прямой, можно провести одну и только одну прямую, параллельную данной.
Гиперболическая геометрия (геометрия Лобачевского) получается заменой этого постулата на:
Л5. В плоскости через точку, не лежащую на данной прямой, можно провести не менее двух прямых, параллельных данной.
Итого получен некий новый набор утверждений; объекты, им удовлетворяющими, образуют гиперболическую геометрию. Если евклидова геометрия описывает (с известными оговорками) окружающий нас мир, то что описывает гиперболическая геометрия? Повседневный опыт тут не дает подсказок. Непротиворечива ли такая геометрия? Если бы она была противоречива, то мы были бы уверены, что евклидова геометрия не только согласуется с нашим повседневным опытом, но и попытки видоизменить её в определённом смысле обречены на провал.
Есть простой способ сопоставить непротиворечивость одного набора аксиом/постулатов с другим: надо поставить объектам (и операциям над ними) одного набора («проверяемого») в соответствие объекты (и операции) из другого («проверяющего»). Если такой трюк можно сделать, не придя к противоречиям, то непротиворечивость проверяемой системы равна непротиворечивости проверяющей системы Модель Пуанкаре именно это и делает: она «моделирует» гиперболическую геометрию в рамках
Приведем «словарик» для этой модели:
В гиперболической геометрии | В модели Пуанкаре |
Плоскость | Круг С, единичного радиуса (без ограничивающей окружности) |
Точка | Точка в С |
Прямая | Окружность, перпендикулярная С |
Угол между прямыми | Угол между касательными в точке пересечения; ноль, если не пересекаются |
Остальное вводится по аналогии. Можно выписать явную формулу для гиперболического расстояния между двумя точками по их евклидовым координатам, скажем. На основе понятия инверсии кругов можно перенести понятие отражения. Это всё чисто технические вопросы, так что я их пропущу.
Важное наблюдение: угол в этой модели совпадает с углом в евклидовой геометрии. Как мы уже видели, свойства замощения сильно зависят от углов фундаментального региона. Приятным (с точки зрения построения замощений) особенностью является следующее утверждение:
В (гиперболическом) треугольнике сумма углов всегда меньше π (180 градусов).
Таким образом, теперь гораздо проще стало назначать углы фундаментальному региону: неравенству удовлетворить проще, чем равенству.
Приведем, наконец, пример: возьмём треугольник с углами в 90, 30 и 40 градусов (в сумме 170 граудсов; старого знакомого с углами 90,30 и 60 брать нельзя: его сумма углов равна 180).
Замощение этим треугольником.

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

Замощение правильным прямоугольным пятиугольником

Стоит отметить, что евклидову плоскость можно замостить правильным треугольником, правильным четырехугольником, правильным шестиугольником, но это невозможно сделать правильным пятиугольником: его угол равен 180*3/5=108 градусам. Увы, 360 не делится нацело на 108. Однако в гиперболической геометрии правильный пятиугольник может иметь сколь угодно маленький угол. Например, 90. Или ноль.
Пока мы говорили только о том, как построить замощение --- то есть, как получить многоугольники, из которых оно состоит. После того, как они нанесены на плоскость, их можно раскрасить!
Как видно на гифке с замощением треугольником, новые треугольники от кадра к кадру меняют цвет. Это достигнуто за счет просто трюка: каждому треугольнику приписывается целое число, поколение, по следующему правилу:
Фундаментальный регион имеет поколение ноль;
Отражения фундаментального региона имеют поколение один;
Отражения поколения один имеют поколение два;
…
ЗАМОЩЕНИЕ!
Пусть, предположим, у нас есть 3 цвета, в которые мы хотим окрасить наше замощение. Тогда поколение 0 мы покрасим в первый цвет, 1 --- во второй, 2 --- в третий, 3 --- в первый, 4 --- во второй, и так далее. Именно так и строились замощения в предыдущем разделе.
Однако можно поступить и более сложно. Предположим, у нас есть некоторая картинка, которая записана в файле. Ее можно перенести из файла, в котором она имеет четырехугольную форму, на произвольный четырехугольник (с помощью барицентрических координат). Тогда при отражении четырехугольника будет отражаться и картинка. Приведем несколько примеров.
Замощение котиком
На просторах интернетов был найден отважный маленький котик Кузя. Он был отправлен бороздить просторы гиперболического мира.
Исходное замощение:

Наложение текстуры:

Замощение глазами
C ФБ у меня остался набор командных глаз. Было бы странно им не воспользоваться, не правда ли?
Раз гифка с глазами

Два гифка с глазами

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

Последний пример не может не навести на мысль о том, что узоры, которые исходно задумывались для замощения (евклидовой) плоскости, могут быть использованы и для гиперболических замощений.
Поэтому, аналогично тому, как каждое поколение получало свой цвет, теперь каждому поколению можно поставить в соответствие свою текстуру («мотив»). Например, если взять вот такие две простые картинки, картинки: первую,

и вторую,

и замостить ими евклидову плоскость, то получится нечто вроде сплетения.нечто вроде сплетения:

А вот что получится, если ими замостить наш круг:
Первый фундаментальный регион

Второй фундаментальный регион

Собственно, по такому принципу и были получены все картинки из начала поста. Вот примеры нескольких наборов мотивов, в них используемых.
Мотивы картинки № 1
Первый,

и второй,

Мотивы картинки № 3
Первый,

второй,

и третий,

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

Мотивы картинки № 8
Для построения использовалась только нижняя половинка текстуры (под диагональю).
Первый мотив,

и второй,

Мотивов делались полуавтоматически: сначала в матлабе я описывал уравнения линий, а потом в Специальной Программе, Предназначенной для Редактирования Изображений Руками, а не Текстом, добавлял цвета и допиливал всякие детали.
Вот так изображение постепенно приобретало цвет. Вот так изображение постепенно приобретало цвет. Здесь использовано четыре мотива.

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

Видно, что центральная область получается очень «большой», а смежные с ней --- очень «маленькими». Это происходит из-за того, что, как уже говорилось, чем дальше от центра, тем сильнее «сжимаются» расстояния для нас, евклидового наблюдателя. Предположим, что мы хотим сделать картинку более детальной: мы хотим, что бы было видно больше семиугольников. В евклидовой плоскости проблема решается очень просто: мы просто заменим центральный семиугольник на подобный ему (= с теми же углами), но с меньшей стороной. Тогда он стал бы заниматься меньше места на картинке, и, поскольку мы изображаем ровно ту же область, больше места стали бы занимать все прочие семиугольники; поскольку углы не изменились, то и остальные семиугольники (как результаты отражений) тоже не изменились.
В гиперболической геометрии такой трюк невозможен в принципе.
Меня сей факт покоробил основательно. Доказывать его здесь смысла нет, однако вот основные элементы цепочки рассуждений, к нему приводящие:
Шаг раз. Следствие Постулата Л5: через точку, не лежащую на заданной прямой, проходит бесконечно много прямых, не имеющих с ней общих точек.
Да, это мы уже видели. Непонятно, как это связано с нашей проблемой.
Следствие. Сумма углов треугольника всегда меньше двух прямых (π радиан, 180 градусов).
Ну ок, может быть: в классической геометрии утверждение о сумме углов треугольника доказывается через проведение прямой, параллельной одной из сторон треугольника. Другие параллельные прямые --- другие свойства суммы углов. Дальше-то что?
Следствие. Углы треугольника однозначно задают длинны его сторон.
А вот это уже неожиданно. В евклидовой геометрии треугольники с равными углами подобны, но никак не равны, и там имела место обратная ситуация: стороны однозначно задавили углы --- например, через теорему косинусов. В гиперболической геометрии справедлив аналог этой теоремы, и, кроме того, есть вторая теорема косинусов, однозначно задающая стороны по углам.
Следствие. (формула Гаусса—Бонне). Площадь треугольника равна π минус сумма его углов в радианах.
Финалочка. Все треугольники (и многоугольники, следовательно, тоже) с одинаковыми углами имеют одинаковые длинны сторон и одинаковую площадь. Мы не можем сделать семиугольник поменьше, не изменив его углов; изменяя его углы, мы меняем всю картинку. Более того, площади всех семиугольников, которые пригодны для замощений, ограничены снизу: как уже говорилось, их угол должен иметь вид π /n, и, стало быть, не может быть больше, чем π /2. Итого, семиугольник, которым мы можем замостить диск, не может иметь площадь меньше, чем 3π /2.
Ну хорошо. Можно пойти и по-другому. Скажем, мы хотим просто растянуть картинку. Какое преобразование, f, нам выбрать? В полярных координатах нам достаточно задать его как функцию только радиуса. Ясно, что f(0) = 0, f(1) = 1 (чтобы круг оставался на месте), и f(r) <= r (условие сжатия). Скажем, нам подойдёт f(r) = rk, где k > 1. На следующей гифке изображено, что получается при различных значениях k.
Сжатие.

Кажется, словно в центре диска поставили черную дыру. Это явно не наш метод, Шурик.
(С другой стороны, можно попробовать f(r) = (exp(r) — 1)/(exp(1) — 1)... вдруг получится?)
Немного лирики (скучно)
Хитрый план. На самом деле, вначале я не собирался заниматься замощениями круга Пуанкаре. Наткнувшись на вот эту галерею, я глубоко впечатлился сечениями сферы Пуанкаре (уже трехмерная модель гиперболической геометрии; аналог круга) оросферой и решил запилить нечто подобное. Для начала я решил быстренько разобраться с двухмерным случаем, а от него перейти к трехмерному, благо, опыт рендеринга у меня кое-какой есть.
Быстренько разобраться не получилось.
Процесс с самого начала пошел как-то тяжело. Неудачно как-то шёл (три с лишним тысячи строк кода на трех языках программирования. Брр.). Все необходимые формулы приходилось собирать по кусочкам из кучи разных источников. Нет, безусловно, литературы --- хватает. Математики любят мозаики. (Правда, любят.) Однако авторов большинства источников либо не интересовал процесс конструктивного построения замощений (если объект существует, то для его изучения этого достаточно; неважно, как его конкретно получить), либо он интересовал с точки зрения построений циркулем и линейкой. Нет, безусловно, построения циркулем и линейкой можно закодить. Но делать это, мягко говоря, не хочется: страшно подумать, сколько лишних действий придется совершить машине при таком подходе. Поэтому многое пришлось делать и выводить самостоятельно. Это, конечно, несложно («простое-препростое упражнение», как любил говорить один мой лектор), но время отняло прилично не в последнюю очередь из-за кривизны моих рук.
Так что построение сечений оросферой откладывается на потом.
Некоторое осознание. Я понимаю, что несмотря на все попытки адаптировать мои мысли, этот текст получается сильно техническим, непонятным и вообще нелитературным. Однако сейчас в нём будет, наверное, самый технический и непонятный момент.
Что такое геометрия? Буквальный перевод --- измерение земли. Со школы слово «геометрия» ассоциируется (у меня, во всяком случае) с чем-то вроде архитектуры. Или астрономии. Или земледелия. В общем, есть набор точек, линий и прочей всячины, что-то мы из этого знаем, что-то--- нет, но хотим узнать. Для этого мы рисуем картинку и думаем, что и как на ней соотносится. В университете к точкам и линиям добавляются всякие сложные поверхности, гиперплоскости и иже с ними. Действующих лиц стало больше, характеры их стали сложнее и глубже, но сюжет и мораль --- те же.
И вот где-то на четвертом курсе я, помнится, прочитал в одной умной книжке следующее «современное» определение геометрии: геометрия --- это множество и заданная на нём группа. Бац. Никакой тебе земли, никаких тебе линий, поверхностей, никакого измерения --- ибо оба действующих лица (множество и группа) слишком абстрактны для такого рода терминов. (Группа --- это, в данном случае и на пальцах, набор преобразований, удовлетворяющий некоторым простым правилам: если в этот набор входит «правый поворот», то в него входит и «левый поворот», если в нем есть «сдвиг вверх», то в нем есть и «сдвиг вниз», и так далее.) Мне это определение показалось тогда чересчур абстрактным и слишком общим: под него, как мне казалось, подходит не только геометрия. Да что под него только не подходит, если подумать. Кроме того, оно выглядит так, словно геометрия --- просто часть теории групп, и, следовательно --- часть алгебры.
Ничего фатального, разумеется, в данном определении нет. Как и большинство определений, которые дают математики, это --- не более чем ярлык, претендующий на то, чтобы быть удобным. Мне этот ярлык тогда, на четвертом курсе, показался крайне неудобным.
Так вот, в процессе отладки, в очередной раз исправляя построитель замощений, я внезапно понял, что занимаюсь я, с чисто математической точки зрения, очень простой вещью: я просто применяю группу к элементам некоторого множества. Ничего более.
Бац.
И вот тут я понял, что это определение --- не такое уж и неудачное.
Как в евклидовой геометрии определяются равные треугольники? Те, которые можно совместить наложением. (Отсюда можно вытащить много других, эквивалентных определений, но они нам сейчас не интересны.) Что такое «наложение»? Ну, это такой набор преобразований плоскости как, условно говоря, твердого тела: можно сдвигать, можно вращать, но нельзя растягивать и гнуть.
Это группа.
Когда две фигуры (=набор элементов множества) в геометрии являются равными? Когда одну из них можно преобразовать в другую элементами группы. И не важно, что это за множество и какова группа --- это определение универсально. На модели Пуанкаре в круге множество --- это, собственно, круг, а группа --- дробно-линейные преобразования. В этом, собственно, и состоит вся разница. Вот геометрия и изучает, чем одно множество с одной группой отличается от другого множества с другой группой: в евклидовой геометрии углы не задают фигуру, а в гиперболической --- задают. И вот с осознанием этого надо как-то жить дальше.
Читателю, героически добравшегося досюда, предлагается бонус: ссылка на книгу по созданию гиперболических поверхностей IRL методом вязания крючком.
@музыка: Transatlantic --- The Whirlwind
@темы: картинки, питон, содержательный пост, матлаб