Что такое Тессеракт? Четырёхмерный куб Четырехмерный куб анимация.


Тессеракт (от др.-греч. τέσσερες ἀκτῖνες — четыре луча) — четырёхмерный гиперкуб — аналог куба в четырёхмерном пространстве.

Изображение является проекцией (перспективой) четырёхмерного куба на трёхмерное пространство.

Согласно Оксфордскому словарю, слово «tesseract» было придумано и начало использоваться в 1888 Чарльзом Говардом Хинтоном (1853—1907) в его книге «Новая эра мысли». Позже некоторые люди назвали ту же самую фигуру «тетракубом».

Геометрия

Обычный тессеракт в евклидовом четырёхмерном пространстве определяется как выпуклая оболочка точек (±1, ±1, ±1, ±1). Иначе говоря, он может быть представлен в виде следующего множества:

Тессеракт ограничен восемью гиперплоскостями, пересечение которых с самим тессерактом задаёт его трёхмерные грани (являющиеся обычными кубами). Каждая пара непараллельных трёхмерных граней пересекается, образуя двумерные грани (квадраты), и так далее. Окончательно, тессеракт обладает 8 трёхмерными гранями, 24 двумерными, 32 рёбрами и 16 вершинами.

Популярное описание

Попытаемся представить себе, как будет выглядеть гиперкуб, не выходя из трёхмерного пространства.

В одномерном «пространстве» — на линии — выделим отрезок АВ длиной L. На двумерной плоскости на расстоянии L от АВ нарисуем параллельный ему отрезок DC и соединим их концы. Получится квадрат ABCD. Повторив эту операцию с плоскостью, получим трехмерный куб ABCDHEFG. А сдвинув куб в четвёртом измерении (перпендикулярно первым трём) на расстояние L, мы получим гиперкуб ABCDEFGHIJKLMNOP.
http://upload.wikimedia.org/wikipedia/ru/1/13/Построение_тессеракта.PNG

Одномерный отрезок АВ служит стороной двумерного квадрата ABCD, квадрат — стороной куба ABCDHEFG, который, в свою очередь, будет стороной четырёхмерного гиперкуба. Отрезок прямой имеет две граничные точки, квадрат — четыре вершины, куб — восемь. В четырёхмерном гиперкубе, таким образом, окажется 16 вершин: 8 вершин исходного куба и 8 сдвинутого в четвёртом измерении. Он имеет 32 ребра — по 12 дают начальное и конечное положения исходного куба, и ещё 8 ребер «нарисуют» восемь его вершин, переместившихся в четвёртое измерение. Те же рассуждения можно проделать и для граней гиперкуба. В двумерном пространстве она одна (сам квадрат), у куба их 6 (по две грани от переместившегося квадрата и ещё четыре опишут его стороны). Четырёхмерный гиперкуб имеет 24 квадратные грани — 12 квадратов исходного куба в двух положениях и 12 квадратов от двенадцати его ребер.

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

Развёртка тессеракта

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

Подобно тому, как трёхмерный куб образуется квадратом, сдвинутым на длину грани, куб, сдвинутый в четвёртое измерение, сформирует гиперкуб. Его ограничивают восемь кубов, которые в перспективе будут выглядеть как некая довольно сложная фигура. Её часть, оставшаяся в «нашем» пространстве, нарисована сплошными линиями, а то, что ушло в гиперпространство, пунктирными. Сам же четырёхмерный гиперкуб состоит из бесконечного количества кубов, подобно тому как трёхмерный куб можно «нарезать» на бесконечное количество плоских квадратов.

Разрезав шесть граней трёхмерного куба, можно разложить его в плоскую фигуру — развёртку. Она будет иметь по квадрату с каждой стороны исходной грани плюс ещё один — грань, ей противоположную. А трёхмерная развертка четырёхмерного гиперкуба будет состоять из исходного куба, шести кубов, «вырастающих» из него, плюс ещё одного — конечной «гиперграни».

Свойства тессеракта представляют собой продолжение свойств геометрических фигур меньшей размерности в четырёхмерное пространство.

Проекции

На двухмерное пространство

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


На трёхмерное пространство

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


Шесть усеченных пирамид по краям тессеракта — это изображения равных шести кубов.
Стереопара

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

Развёртка тессеракта

Поверхность тессеракта может быть развёрнута в восемь кубов (аналогично тому, как поверхность куба может быть развернута в шесть квадратов). Существует 261 различная развёртка тессеракта. Развёртки тессеракта могут быть подсчитаны нанесением на граф соединённых углов.

Тессеракт в искусстве

У Эдвине А. «Новая Равнина Абботта», гиперкуб выступает рассказчиком.
В одном эпизоде «Приключений Джимми Нейтрона»: «Мальчик-гений» Джимми изобретает четырёхмерный гиперкуб, идентичный фолдбоксу из романа «Дорога славы» 1963 Хайнлайна.
Роберт Э. Хайнлайн упоминал гиперкубы, по крайней мере, в трёх научно-фантастических рассказах. В «Дом четырех измерений» («Дом, который построил Тил») (1940) он описал дом, построенный как развёртка тессеракта.
В романе «Дорога славы» Хайнлайна описана гиперразмерная посуда, которая была изнутри больше, чем снаружи.
Рассказ Генри Каттнера «Mimsy Were the Borogoves» описывает развивающую игрушку для детей из далёкого будущего, по строению похожую на тессеракт.
В романе Алекса Гарленда (1999), термин «тессеракт» используется для трехмерной развёртки четырёхмерного гиперкуба, а не гиперкуба непосредственно. Это метафора, призванная показать, что познающая система должна быть шире познаваемой.
Сюжет фильма «Куб 2: Гиперкуб» сосредотачивается на восьми незнакомцах, пойманных в ловушку в «гиперкубе», или сети связанных кубов.
Телесериал «Андромеда» использует тессеракт-генераторы как устройство заговора. Они прежде всего предназначены, чтобы управлять пространством и временем.
Картина «Распятие на кресте» (Corpus Hypercubus) Сальвадора Дали (1954)
Комиксы «Nextwave comic book» изображают средство передвижения, включающее в себя 5 зон тессеракта.
В альбоме Voivod Nothingface одна из композиций названа «В моём гиперкубе».
В романе Энтони Пирса «Маршрут Куба» одна из орбитальных лун Международной ассоциации развития называется тессерактом, который был сжат в 3 измерения.
В сериале «Школа „Чёрная дыра“» в третьем сезоне есть серия «Тессеракт». Лукас нажимает на секретную кнопку и школа начинает складываться как математический тессеракт.
Термин «тессеракт» и производный от него термин «тессировать» встречается в повести Мадлен Л’Энгл «Складка времени»

Начнём с объяснения, что же такое четырёхмерное пространство.

Это - одномерное пространство, то есть просто ось OX. Любая точка на ней характеризуется одной координатой.


Теперь проведём ось OY перпендикулярно оси OX. Вот и получилось двумерное пространство, то есть плоскость XOY. Любая точка на ней характеризуется двумя координатами - абсциссой и ординатой.


Проведём ось OZ перпендикулярно осям OX и OY. Получится трёхмерное пространство, в котором у любой точки есть абсцисса, ордината и аппликата.


Логично, что четвёртая ось, OQ, должна быть перпендикулярной осям OX, OY и OZ одновременно. Но мы не можем точно построить такую ось, и потому остаётся только попытаться представить её себе. У каждой точки в четырёхмерном пространстве есть четыре координаты: x, y, z и q.

Теперь посмотрим, как появился четырёхмерный куб.


На картинке изображена фигура одномерного пространства - линия.


Если сделать параллельный перенос этой линии вдоль оси OY, а потом соединить соответствующие концы двух получившихся линий, получится квадрат.


Аналогично, если сделать параллельный перенос квадрата вдоль оси OZ и соединить соответствующие вершины, то получится куб.


А если сделать параллельный перенос куба вдоль оси OQ и соединить вершины двух этих кубов, то мы получим четырёхмерный куб. Кстати, он называется тессеракт .

Чтобы нарисовать куб на плоскости, нужно его спроецировать . Наглядно это выглядит так:

Представим, что в воздухе над поверхностью висит каркасная модель куба, то есть как бы «сделанная из проволоки», а над ней - лампочка. Если включить лампочку, обвести карандашом тень от куба, а потом выключить лампочку, то на поверхности будет изображена проекция куба.

Перейдём к немного более сложному. Ещё раз посмотрите на рисунок с лампочкой: как видите, все лучи сошлись в одной точке. Она называется точкой схода и используется для построения перспективной проекции (а бывает и параллельная, когда все лучи параллельны друг другу. Результат - не создаётся ощущения объёма, но она легче, и при том если точка схода достаточно сильно удалена от проецируемого объекта, то разница между этими двумя проекциями мало заметна). Чтобы спроецировать данную точку на данную плоскость, используя точку схода, нужно провести прямую через точку схода и данную точку, а потом найти точку пересечения получившейся прямой и плоскости. А для того, чтобы спроецировать более сложную фигуру, скажем, куб, нужно спроецировать каждую его вершину, а потом соответствующие точки соединить. Следует заметить, что алгоритм проекции пространства на подпространство можно обобщить для случая 4D->3D, а не только 3D->2D.

Как я уже говорил, мы не можем себе точно представить, как выглядит ось OQ, равно как и тессеракт. Зато мы можем получить ограниченное представление о нём, если мы спроецируем его на объём, а потом нарисуем это на экране компьютера!

Теперь поговорим о проекции тессеракта.


Слева находится проекция куба на плоскость, а справа - тессеракта на объём. Они довольно схожи: проекция куба выглядит как два квадрата, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены линиями. А проекция тессеракта выглядит как два куба, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены. Но мы все видели куб, и можем с уверенностью сказать, что и маленький квадрат, и большой, и четыре трапеции сверху, снизу, справа и слева от маленького квадрата, на самом деле являются квадратами, при чём равными. И у тессеракта тоже самое. И большой куб, и маленький куб, и шесть усечённых пирамид по бокам от маленького куба - это всё кубы, при чём равные.

Моя программа умеет не только рисовать проекцию тессеракта на объём, а ещё и вращать его. Рассмотрим, как делается это.

Для начала я вам расскажу, что такое вращение параллельно плоскости .

Представьте себе, что куб вращается вокруг оси OZ. Тогда каждая из его вершин описывает окружность вокруг оси OZ.

А окружность - фигура плоская. И плоскости каждой из этих окружностей параллельны между собой, и в данном случае параллельны плоскости XOY. То есть мы можем говорить не только о вращении вокруг оси OZ, а ещё и о вращении параллельно плоскости XOY.Как видим, у точек, которые вращаются параллельно оси XOY меняются только абсцисса и ордината, аппликата же остаётся неизменной И, вообще-то, мы можем говорить о вращении вокруг прямой только тогда, когда имеем дело с трёхмерным пространством. В двумерном всё вращается вокруг точки, в четырёхмерном - вокруг плоскости, в пятимерном пространстве мы говорим о вращении вокруг объёма. И если вращение вокруг точки мы можем себе представить, то вращение вокруг плоскости и объёма - что-то немыслимое. А если будем говорить о вращении параллельно плоскости, то тогда в любом n-мерном пространстве точка может вращаться параллельно плоскости.

Многие из вас, вероятно, слышали о матрице поворота. Умножив точку на неё, получим точку, повёрнутую параллельно плоскости на угол фи. Для двумерного пространства она выглядит так:

Как умножать: икс точки, повёрнутой на угол фи = косинус угла фи*икс первоначальной точки минус синус угла фи*игрек первоначальной точки;
игрек точки, повёрнутой на угол фи=синус угла фи*икс первоначальной точки плюс косинус угла фи*игрек первоначальной точки.
Xa`=cosф*Xa - sinф*Ya
Ya`=sinф*Xa + cosф*Ya
, где Xa и Ya - абсцисса и ордината точки, которую нужно повернуть, Xa` и Ya` - абсцисса и ордината уже повёрнутой точки

Для трёхмерного пространства это матрица обобщается следующим образом:

Вращение параллельно плоскости XOY. Как видим, координата Z не меняется, а меняются только X и Y
Xa`=cosф*Xa - sinф*Ya + Za*0
Ya`=sinф*Xa +cosф*Ya + Za*0
Za`=Xa*0 + Ya*0 + Za*1 (по сути, Za`=Za)


Вращение параллельно плоскости XOZ. Ничего нового,
Xa`=cosф*Xa + Ya*0 - sinф*Za
Ya`=Xa*0 + Ya*1 + Za*0 (по сути, Ya`=Ya)
Za`=sinф*Xa + Ya*0 + cosф*Za


И третья матрица.
Xa`=Xa*1 + Ya*0 + Za*0 (по сути, Xa`=Xa)
Ya`=Xa*0 + cosф*Ya - sinф*Za
Za`=Xa*0 + sinф*Ya + cosф*Za

А для четвёртого измерения они выглядят вот так:


Думаю, вы уже поняли, что на что множить, потому лишний раз расписывать не буду. Зато замечу, что она делает то же самое, что и матрица для поворота параллельно плоскости в трёхмерном пространстве! И та, и эта изменяют только ординату и аппликату, а остальные координаты не трогают, потому её можно использовать и в трёхмерном случае, просто не обращая внимания на четвёртую координату.

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


pov значит «Point of view» (точка зрения), ptp значит «Point to project» (точка, которую нужно спроецировать), а ptp` - это искомая точка на оси OX.

Углы povptpB и ptpptp`A равны как соответствующие(пунктирная линия параллельна оси OX, прямая povptp - секущая).
Икс точки ptp` равен иксу точки ptp минус длина отрезка ptp`A. Этот отрезок можно найти из треугольника ptpptp`A: ptp`A = ptpA/тангенс угла ptpptp`A. Мы можем найти этот тангенс из треугольника povptpB: тангенс угла ptpptp`A = (Ypov-Yptp)(Xpov-Xptp).
Ответ: Xptp`=Xptp-Yptp/тангенс угла ptpptp`A.

Я не стал подробно расписывать этот алгоритм тут, так как там куча частных случаев, когда формула несколько меняется. Кому это интересно - посмотрите в исходниках программы, там всё расписано в комментариях.

Для того, чтобы спроецировать точку трёхмерного пространства на плоскость, просто рассмотрим две плоскости - XOZ и YOZ, и для каждой из них решим эту задачу. В случае четырёхмерного пространства нужно рассмотреть уже три плоскости: XOQ, YOQ и ZOQ.

И наконец, про программу. Она действует так: инициализировать шестнадцать вершин тессеракта -> в зависимости от введённых пользователем команд повернуть его -> спроецировать на объём -> в зависимости от введённых пользователем команд повернуть его проекцию -> спроецировать на плоскость -> нарисовать.

Проекции и повороты я написал сам. Они работают по формулам, которые я только что описал. Библиотека OpenGL рисует линии, а так же занимается смешиванием цветов. А координаты вершин тессеракта вычисляются таким образом:

Координаты вершин линии с центром в начале координат и длинной 2 - (1) и (-1);
- " - " - квадрата - " - " - и ребром длинной 2:
(1; 1), (-1; 1), (1; -1) и (-1; -1);
- " - " - куба - " - " -:
(1; 1; 1), (-1; 1; 1), (1; -1; 1), (-1; -1; 1), (1; 1; -1), (-1; 1; -1), (1; -1; -1), (-1; -1; -1);
Как можно было заметить, квадрат - это одна линия над осью OY и одна линия под осью OY; куб - это один квадрат спереди от плоскости XOY, и один за ней; тессеракт - это один куб по ту сторону объёма XOYZ, и один - по эту. Но куда легче воспринять это чередование единиц и минус единиц, если их записать в столбик

1; 1; 1
-1; 1; 1
1; -1; 1
-1; -1; 1
1; 1; -1
-1; 1; -1
1; -1; -1
-1; -1; -1

В первом столбце один и минус один чередуются. Во втором столбце сначала идёт два плюса, потом два минуса. В третьем - четыре плюс единицы, а потом четыре минус единицы. Это были вершины куба. У тессеракта их в два раза больше, и потому нужно было написать цикл для их объявления, иначе очень легко запутаться.

Моя программа так же умеет рисовать анаглиф. Счастливые обладатели 3D-очков могут наблюдать стереоскопическую картинку. В рисовании картинки нет ничего хитрого, просто рисуется две проекции на плоскость, для правого и левого глаз. Зато программа становится намного более наглядной и интересной, а главное - даёт лучшее представление о четырёхмерном мире.

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

Архив с программой, исходником и инструкцией пользования.

Эволюция человеческого мозга проходила в трехмерном пространстве. Поэтому нам сложно представить себе пространства с размерностью больше трех. Фактически человеческий мозг не может себе представить геометрические объекты с размерностью более трех. И в то же время мы без труда представляем себе геометрические объекты с размерностью не только три, но и с размерностью два и один.

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

Чтобы понять, как строится гиперкуб из обычного куба, надо сначала посмотреть, как строится обычный куб из обычного квадрата. Для оригинальности изложения этого материала, будем здесь обычный квадрат называть СубКубом (и не будем путать его с суккубом).

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

То, что Вы сейчас прочитали, изложено чрезмерно подробно и с массой уточнений. И не спроста. Сейчас мы сделаем такой фокус, заменим в предыдущем тексте некоторые слова формально таким образом:
куб -> гиперкуб
субкуб -> куб
плоскость -> объем
третьего -> четвертого
двумерной -> трехмерной
четырех -> шести
трехмерный -> четырехмерный
две -> три
плоскости -> пространстве

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

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

Почему у нас такая уверенность, что мы получили правильное описание построения гиперкуба? Да потому что точно такой же формальной заменой слов мы получаем описание построения куба из описания построения квадрата. (Проверьте это сами.)

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

Итого получаем, что гиперкуб имеет 12+6+6=24 квадратных граней.

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



На этом каркасе внутренний куб это как бы начальный куб, с которого началось построение и который ограничивает четырехмерный объем гиперкуба по четвертой оси снизу. Мы этот начальный куб протягиваем вверх вдоль четвертой оси измерения и он переходит во внешний куб. Итак внешний и внутренний кубы из этого рисунка ограничивают гиперкуб по четвертой оси измерения.

А между этими двумя кубами видно еще 6 новых кубов, которые соприкасаются общими гранями с первыми двумя. Эти шесть кубов ограничивают наш гиперкуб по трем осям трехмерного пространства. Как видите, они соприкасаются не только с первыми двумя кубами, которые на этом трехмерном каркасе внутренний и внешний, но они еще соприкасаются друг с другом.

Можно прямо на рисунке посчитать и убедиться, что у гиперкуба действительно 24 грани. Но вот возникает такой вопрос. Этот каркас гиперкуба в трехмерном пространстве заполнен восемью трехмерными кубами без всяких просветов. Чтобы из этой трехмерной проекции гиперкуба сделать настоящий гиперкуб, надо вывернуть этот каркас наизнанку так, чтобы все 8 кубов ограничивали 4-мерный объем.

Делается это так. Приглашаем в гости жителя четырехмерного пространства и просим его помочь нам. Он хватает внутренний куб этого каркаса и сдвигает его в направлении четвертого измерения, которое перпендикулярно нашему трехмерному пространству. Мы в нашем трехмерном пространстве воспринимаем это так, как будто бы весь внутренний каркас исчез и остался только каркас внешнего куба.

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

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

Опять обратимся к аналогии с пространствами меньшей размерности. Сравните изображение каркаса гиперкуба с проекцией трехмерного куба на плоскость, показанную на следующей картинке.



Жители двумерного пространства построили на плоскости каркас проекции куба на плоскость и пригласили нас, трехмерных жителей, выворачивать этот каркас наизнанку. Мы берем четыре вершины внутреннего квадрата и сдвигаем их перпендикулярно плоскости. Двумерные жители при этом видят полное исчезновение всего внутреннего каркаса, и у них остается только каркас внешнего квадрата. При такой операции все квадраты, которые соприкасались своими ребрами, продолжают по-прежнему соприкасаться теми же самыми ребрами.

Поэтому мы надеемся, что и логическая схема гиперкуба также не будет нарушена при выворачивании каркаса гиперкуба наизнанку, а число квадратных граней гиперкуба при этом не увеличится и будет по-прежнему равно 24. Это, конечно же, никакое не доказательство, а чисто догадка по аналогии.

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

Как только я стала в состоянии после операции читать лекции, первый же вопрос, который задали студенты:

Когда вы нам нарисуете 4-мерный куб? Ильяс Абдульхаевич нам обещал!

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

Давайте сначала договоримся. 4-мерное, а тем более 5-6-7- и вообще k-мерное пространство нам в чувственных ощущениях не дано.
"Мы убоги, потому что всего лишь трехмерны," -- как говорил мой преподаватель в воскресной школе, который первым и рассказал мне, что такое 4-мерный куб. Воскресная школа была, естественно, крайне религиозная -- математическая. В тот раз мы вот изучали гипер-кубы. За неделю до этого мат.индукцию, через неделю после этого гамильтоновы циклы в графах -- соответственно, это 7 класс.

Мы не можем 4-мерный куб потрогать, понюхать, услышать или увидеть. Что же мы можем с ним сделать? Мы можем его себе представить! Потому что наш мозг гораздо более сложная штука, чем наши глаза и руки.

Итак, для того, чтобы понять, что такое 4-мерный куб, давайте поймем сначала то, что нам доступно. Что такое 3-мерный куб?

Ладно-ладно! Я не прошу у вас четкого математического определения. Просто представьте себе самый простой и обыкновенный трех-мерный куб. Представили?

Хорошо.
Для того, чтобы понять, как же обобщить 3-мерный куб в 4-мерное пространство, давайте сообразим, что же такое 2-мерный куб. Так это просто -- это же квадрат!

У квадрата 2 координаты. У куба три. Точки квадрата -- точки с двумя координатами. Первая от 0 до 1. И вторая от 0 до 1. У точек куба три координаты. И каждая -- любое число от 0 до 1.

Логично себе представить, что 4-мерный куб -- это такая штука, у которой 4 координаты и все от 0 до 1.

/* Тут же логично представить себе 1-мерный куб, который не что иное как простой отрезок от 0 до 1. */

Так, стоп, а как же рисовать 4-мерный куб? Ведь мы не можем на плоскости нарисовать 4-мерное пространство!
Но ведь 3-мерное пространство мы тоже не рисуем на плоскости, мы рисуем его проекцию на 2-мерную плоскость рисунка. Третью координату (z) мы располагаем под углом, представляя себе, что ось из плоскости рисунка идет "к нам".

Теперь совершенно ясно, как же рисовать 4-мерный куб. Точно так же, как третью ось мы расположили под некоторым углом, возьмем четвертую ось и тоже расположим под некоторым углом.
И -- вуаля! -- проекция 4-мерного куба на плоскость.

Что? Что это вообще? Слышу я всегда шепот с задних парт. Давайте я подробнее объясню, что же это за мешанина линий.
Смотрите сначала на трехмерный куб. Что мы сделали? Мы взяли квадрат и протащили его вдоль третьей оси (z). Это как много-много бумажных квадратов, склеенных в стопку между собой.
С 4-мерным кубом то же самое. Давайте четвертую ось для удобства и для сайнс-фикшн будем называть "ось времени". Нам надо взять обычный трех-мерный куб и протащить его во времени от времени "сейчас" до времени "через час".

У нас есть куб "сейчас". На рисунке он розовый.

А теперь тащим его вдоль четвертой оси -- вдоль оси времени (я ее показала зеленым). И получаем куб будущего -- голубой.

Каждая вершина "куба сейчас" во времени оставляет след -- отрезочек. Соединяющий ее теперешнюю с ней же будущей.

Короче, без лирики: нарисовали два одинаковых 3-мерных куба и соединили соответствующие вершины.
Точно так же, как делали с 3-мерным кубом (нарисовали 2 одинаковых 2-мерных куба и соединили вершины).

Чтобы нарисовать 5-мерный куб, вам придется нарисовать две копии 4-мерного куба (4-мерный куб с пятой координатой 0 и 4-мерный куб с пятой координатой 1) и соединить соответствующие вершины ребрами. Правда, на плоскости выйдет такая мешанина ребер, что понять что-либо будет почти невозможно.

Когда мы представили себе 4-мерный куб и даже смогли его нарисовать, можно его по-всякому исследовать. Не забывая исследовать его и в уме, и по картинке.
Напрмер. 2-мерный куб ограничен с 4 сторон 1-мерными кубами. Это логично: по каждой из 2 координат у него есть и начало, и конец.
3-мерный куб ограничен с 6 сторон 2-мерными кубами. По каждой из трех координат у него есть начало и конец.
Значит, 4-мерный куб должен быть ограничен восемью 3-мерными кубами. По каждой из 4 координат -- с двух сторон. На рисунке выше мы явно видим 2 грани, ограничивающие его по координате "время".

Вот тут -- два кубика (они чуть-чуть косые потому, что у них 2 размерности спроецированы на плоскость под углом), ограничивающие наш гипер-куб слева и справа.

Нетрудно так же заметить "верхний" и "нижний".

Самое сложное -- понять визуально, где "передний" и "задний". Передний начинается от передней грани "куба сейчас" и до передней грани "куба будущего" -- он рыжий. Задний соответственно, фиолетовый.

Их труднее всего заметить, потому что под ногами путаются другие кубы, которые ограничивают гипер-куб по другой спроецированной координате. Но заметьте, что кубы все-таки разные! Вот еще раз картинка, где выделен "куб сейчас" и "куб будущего".

Конечно, можно спроецировать 4-мерный куб в 3-мерное пространство.
Первая возможная пространственная модель понятно как выглядит: надо взять 2 каркаса куба и соединить их соответствующие вершины новым ребром.
У меня такой модели сейчас в наличии нет. На лекции я студентам показываю немного другую 3-мерную модель 4-мерного куба.

Знаете, как куб проецируют на плоскость вот так.
Как будто мы смотрим на куб сверху.

Ближняя грань, понятно, большая. А дальняя грань выглядит поменьше, мы ее видим сквозь ближнюю.

Вот так же можно проецировать 4-мерный куб. Куб сейчас побольше, куб будущего мы видим в отдалении, поэтому он выглядит меньше.

С другой стороны. Со стороны вершины.

Прямо ровно со стороны грани:

Со стороны ребра:

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

Ну, а дальше можно придумывать всякое. Например, как бывает развертка 3-мерного куба на плоскость (это как надо вырезать лист бумаги, чтобы при сворачивании получить куб), так же бывает развертка 4-мерного куба в пространство. Это как надо вырезать кусок дерева, чтобы сворачивая его в 4-мерном пространстве мы получили тессеракт.

Можно изучать не просто 4-мерный куб, а вообще n-мерные кубы. Например, правда ли, что радиус сферы, описанной вокруг n-мерного куба меньше, чем длина ребра этого куба? Или вот вопрос попроще: а сколько вершин у n-мерного куба? А сколько ребер (1-мерных граней)?

Начнём с объяснения, что же такое четырёхмерное пространство.

Это - одномерное пространство, то есть просто ось OX. Любая точка на ней характеризуется одной координатой.


Теперь проведём ось OY перпендикулярно оси OX. Вот и получилось двумерное пространство, то есть плоскость XOY. Любая точка на ней характеризуется двумя координатами - абсциссой и ординатой.


Проведём ось OZ перпендикулярно осям OX и OY. Получится трёхмерное пространство, в котором у любой точки есть абсцисса, ордината и аппликата.


Логично, что четвёртая ось, OQ, должна быть перпендикулярной осям OX, OY и OZ одновременно. Но мы не можем точно построить такую ось, и потому остаётся только попытаться представить её себе. У каждой точки в четырёхмерном пространстве есть четыре координаты: x, y, z и q.

Теперь посмотрим, как появился четырёхмерный куб.


На картинке изображена фигура одномерного пространства - линия.


Если сделать параллельный перенос этой линии вдоль оси OY, а потом соединить соответствующие концы двух получившихся линий, получится квадрат.


Аналогично, если сделать параллельный перенос квадрата вдоль оси OZ и соединить соответствующие вершины, то получится куб.


А если сделать параллельный перенос куба вдоль оси OQ и соединить вершины двух этих кубов, то мы получим четырёхмерный куб. Кстати, он называется тессеракт .

Чтобы нарисовать куб на плоскости, нужно его спроецировать . Наглядно это выглядит так:

Представим, что в воздухе над поверхностью висит каркасная модель куба, то есть как бы «сделанная из проволоки», а над ней - лампочка. Если включить лампочку, обвести карандашом тень от куба, а потом выключить лампочку, то на поверхности будет изображена проекция куба.

Перейдём к немного более сложному. Ещё раз посмотрите на рисунок с лампочкой: как видите, все лучи сошлись в одной точке. Она называется точкой схода и используется для построения перспективной проекции (а бывает и параллельная, когда все лучи параллельны друг другу. Результат - не создаётся ощущения объёма, но она легче, и при том если точка схода достаточно сильно удалена от проецируемого объекта, то разница между этими двумя проекциями мало заметна). Чтобы спроецировать данную точку на данную плоскость, используя точку схода, нужно провести прямую через точку схода и данную точку, а потом найти точку пересечения получившейся прямой и плоскости. А для того, чтобы спроецировать более сложную фигуру, скажем, куб, нужно спроецировать каждую его вершину, а потом соответствующие точки соединить. Следует заметить, что алгоритм проекции пространства на подпространство можно обобщить для случая 4D->3D, а не только 3D->2D.

Как я уже говорил, мы не можем себе точно представить, как выглядит ось OQ, равно как и тессеракт. Зато мы можем получить ограниченное представление о нём, если мы спроецируем его на объём, а потом нарисуем это на экране компьютера!

Теперь поговорим о проекции тессеракта.


Слева находится проекция куба на плоскость, а справа - тессеракта на объём. Они довольно схожи: проекция куба выглядит как два квадрата, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены линиями. А проекция тессеракта выглядит как два куба, маленький и большой, один внутри другого, и у которых соответствующие вершины соединены. Но мы все видели куб, и можем с уверенностью сказать, что и маленький квадрат, и большой, и четыре трапеции сверху, снизу, справа и слева от маленького квадрата, на самом деле являются квадратами, при чём равными. И у тессеракта тоже самое. И большой куб, и маленький куб, и шесть усечённых пирамид по бокам от маленького куба - это всё кубы, при чём равные.

Моя программа умеет не только рисовать проекцию тессеракта на объём, а ещё и вращать его. Рассмотрим, как делается это.

Для начала я вам расскажу, что такое вращение параллельно плоскости .

Представьте себе, что куб вращается вокруг оси OZ. Тогда каждая из его вершин описывает окружность вокруг оси OZ.

А окружность - фигура плоская. И плоскости каждой из этих окружностей параллельны между собой, и в данном случае параллельны плоскости XOY. То есть мы можем говорить не только о вращении вокруг оси OZ, а ещё и о вращении параллельно плоскости XOY.Как видим, у точек, которые вращаются параллельно оси XOY меняются только абсцисса и ордината, аппликата же остаётся неизменной И, вообще-то, мы можем говорить о вращении вокруг прямой только тогда, когда имеем дело с трёхмерным пространством. В двумерном всё вращается вокруг точки, в четырёхмерном - вокруг плоскости, в пятимерном пространстве мы говорим о вращении вокруг объёма. И если вращение вокруг точки мы можем себе представить, то вращение вокруг плоскости и объёма - что-то немыслимое. А если будем говорить о вращении параллельно плоскости, то тогда в любом n-мерном пространстве точка может вращаться параллельно плоскости.

Многие из вас, вероятно, слышали о матрице поворота. Умножив точку на неё, получим точку, повёрнутую параллельно плоскости на угол фи. Для двумерного пространства она выглядит так:

Как умножать: икс точки, повёрнутой на угол фи = косинус угла фи*икс первоначальной точки минус синус угла фи*игрек первоначальной точки;
игрек точки, повёрнутой на угол фи=синус угла фи*икс первоначальной точки плюс косинус угла фи*игрек первоначальной точки.
Xa`=cosф*Xa - sinф*Ya
Ya`=sinф*Xa + cosф*Ya
, где Xa и Ya - абсцисса и ордината точки, которую нужно повернуть, Xa` и Ya` - абсцисса и ордината уже повёрнутой точки

Для трёхмерного пространства это матрица обобщается следующим образом:

Вращение параллельно плоскости XOY. Как видим, координата Z не меняется, а меняются только X и Y
Xa`=cosф*Xa - sinф*Ya + Za*0
Ya`=sinф*Xa +cosф*Ya + Za*0
Za`=Xa*0 + Ya*0 + Za*1 (по сути, Za`=Za)


Вращение параллельно плоскости XOZ. Ничего нового,
Xa`=cosф*Xa + Ya*0 - sinф*Za
Ya`=Xa*0 + Ya*1 + Za*0 (по сути, Ya`=Ya)
Za`=sinф*Xa + Ya*0 + cosф*Za


И третья матрица.
Xa`=Xa*1 + Ya*0 + Za*0 (по сути, Xa`=Xa)
Ya`=Xa*0 + cosф*Ya - sinф*Za
Za`=Xa*0 + sinф*Ya + cosф*Za

А для четвёртого измерения они выглядят вот так:


Думаю, вы уже поняли, что на что множить, потому лишний раз расписывать не буду. Зато замечу, что она делает то же самое, что и матрица для поворота параллельно плоскости в трёхмерном пространстве! И та, и эта изменяют только ординату и аппликату, а остальные координаты не трогают, потому её можно использовать и в трёхмерном случае, просто не обращая внимания на четвёртую координату.

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


pov значит «Point of view» (точка зрения), ptp значит «Point to project» (точка, которую нужно спроецировать), а ptp` - это искомая точка на оси OX.

Углы povptpB и ptpptp`A равны как соответствующие(пунктирная линия параллельна оси OX, прямая povptp - секущая).
Икс точки ptp` равен иксу точки ptp минус длина отрезка ptp`A. Этот отрезок можно найти из треугольника ptpptp`A: ptp`A = ptpA/тангенс угла ptpptp`A. Мы можем найти этот тангенс из треугольника povptpB: тангенс угла ptpptp`A = (Ypov-Yptp)(Xpov-Xptp).
Ответ: Xptp`=Xptp-Yptp/тангенс угла ptpptp`A.

Я не стал подробно расписывать этот алгоритм тут, так как там куча частных случаев, когда формула несколько меняется. Кому это интересно - посмотрите в исходниках программы, там всё расписано в комментариях.

Для того, чтобы спроецировать точку трёхмерного пространства на плоскость, просто рассмотрим две плоскости - XOZ и YOZ, и для каждой из них решим эту задачу. В случае четырёхмерного пространства нужно рассмотреть уже три плоскости: XOQ, YOQ и ZOQ.

И наконец, про программу. Она действует так: инициализировать шестнадцать вершин тессеракта -> в зависимости от введённых пользователем команд повернуть его -> спроецировать на объём -> в зависимости от введённых пользователем команд повернуть его проекцию -> спроецировать на плоскость -> нарисовать.

Проекции и повороты я написал сам. Они работают по формулам, которые я только что описал. Библиотека OpenGL рисует линии, а так же занимается смешиванием цветов. А координаты вершин тессеракта вычисляются таким образом:

Координаты вершин линии с центром в начале координат и длинной 2 - (1) и (-1);
- " - " - квадрата - " - " - и ребром длинной 2:
(1; 1), (-1; 1), (1; -1) и (-1; -1);
- " - " - куба - " - " -:
(1; 1; 1), (-1; 1; 1), (1; -1; 1), (-1; -1; 1), (1; 1; -1), (-1; 1; -1), (1; -1; -1), (-1; -1; -1);
Как можно было заметить, квадрат - это одна линия над осью OY и одна линия под осью OY; куб - это один квадрат спереди от плоскости XOY, и один за ней; тессеракт - это один куб по ту сторону объёма XOYZ, и один - по эту. Но куда легче воспринять это чередование единиц и минус единиц, если их записать в столбик

1; 1; 1
-1; 1; 1
1; -1; 1
-1; -1; 1
1; 1; -1
-1; 1; -1
1; -1; -1
-1; -1; -1

В первом столбце один и минус один чередуются. Во втором столбце сначала идёт два плюса, потом два минуса. В третьем - четыре плюс единицы, а потом четыре минус единицы. Это были вершины куба. У тессеракта их в два раза больше, и потому нужно было написать цикл для их объявления, иначе очень легко запутаться.

Моя программа так же умеет рисовать анаглиф. Счастливые обладатели 3D-очков могут наблюдать стереоскопическую картинку. В рисовании картинки нет ничего хитрого, просто рисуется две проекции на плоскость, для правого и левого глаз. Зато программа становится намного более наглядной и интересной, а главное - даёт лучшее представление о четырёхмерном мире.

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

Архив с программой, исходником и инструкцией пользования.