thedeemon: (Default)
Одно из центральных уравнений общей теории относительности - метрика Шварцшильда, описывающая простейшую черную дыру - незаряженную и невращающуюся. В координатах, похожих на полярные, она выглядит так:

Тут черная дыра находится в начале координат, имеет радиус r_s, и уравнение говорит нам, что если мы находимся в момент t в точке с координатами (r, θ, φ), то при перемещении на малюсенький вектор (dr, dθ, dφ) за dt координатных секунд на наших часах пройдет dτ секунд, это "proper time", инвариант, не зависящий от системы отсчета. Поскольку нас интересует чисто геометрия, и никакие аспекты времени мы не визуализируем, то можно убрать из рассмотрения время. И поскольку такая ЧД сферически симметрична, а мы научились визуализировать двумерные искривленные многообразия, то возьмем плоскость, проходящую через "экватор" ЧД, т.е. выбросим еще одну из угловых координат, оставим лишь радиус r и угол u.
Тогда останется метрика
ds^2 = 1/(1 - R/r) * dr^2 + r^2 * du^2
или
ds^2 = (1 + R/(r-R)) * dr^2 + r^2 * du^2
где ds - длина маленького вектора (dr, du) в точке (r, u), а R - радиус ЧД.

Давайте, как в предыдущих частях, сделаем поверхность, вложенную в евклидово 3D пространство функцией (u,r) -> (x,y,z). x и z будут просто получаться из полярных координат привычным образом
x = r*cos(u), z = -r*sin(u)
как на обычной плоскости в евклидовой геометрии, а y будет задаваться некоторой функцией от радиуса F(r). Т.е.
X(u,r) = [r*cos(u), F(r), -r*sin(u)]
Тогда базисные вектора получатся
Xu = [-sin(u) * r, 0, -cos(u) * r]
Xr = [cos(u), dF(r), -sin(u)]
и метрика будет
ds^2 = (1 + dF(r)^2) * dr^2 + r^2 * du^2
Т.е. мы получим в точности наше сечение Шварцшильдовской черной дыры, если
dF(r)^2 = R/(r-R)
где dF(r) - производная F(r) по r
Тогда dF(r) = √(R/(r-R))
это можно проинтегрировать, получим
F(r) = 2√(R*(r-R))
Т.е. взяв радиус ЧД за 1, получим поверхность как результат вращения ф-ии 2√(r-1).

Кто видел исходное уравнение Шварцшильда, помнит, что у горизонта событий коэффициент при dt стремится к нулю (время замедляется), а коэффициент при dr ровно ему обратен, и во столько же раз растет, стремится к бесконечности. Пространство растягивается ровно настолько же, насколько сжимается время. В вакууме соблюдается инвариантность 4-мерного элемента объема.
И действительно, на нашей поверхности в r = 1 (или r=R более общем случае) у нас эта поверхность становится вертикальной, dF(r) обращается в бесконечность, и значит элемент длины в радиальном направлении обращается в бесконечность там. Но значит ли, что путь к горизонту бесконечно долог? Нарисовав поверхность, становится очевиден ответ: путь до горизонта это просто путь по поверхности, т.е. вдоль графика 2√(r-1), а он не так уж длинен, хоть, конечно и несколько длиннее, чем было бы на плоскости.
И второе наблюдение: продолжить поверхность на r < R так просто не получается, там у нас корень из отрицательной величины. В некоторых роликах рисуют уходящую бесконечно вниз воронку. По-моему, это не совсем корректно. Уклон воронки уже на горизонте вертикален, а дальше... Я не возьмусь пытаться изобразить внутренность черной дыры.
thedeemon: (Default)
Ну и вот. Написал я тогда модуль символьных вычислений, который умеет арифметику, умеет частные производные, в том числе тригонометрии и сложных ф-й, умеет немного упрощать (выносить за скобки, сокращать дроби, знает, что sin^2 + cos^2 = 1) и умеет генерить код. Этот модуль используется в компайл-тайме, и из одного лишь уравнения поверхности выводит все необходимые формулы и генерит код для каждой фигуры, который тут же компилятором оптимизируется. Посмотрим на примере все той же сферы.
Задаем уравнение поверхности, отображение 2D координат (u,v) в 3D (x,y,z).

Expr[] sphereEq() {
    auto R = new Var("R");
    return [mul(R, mul(new Cos("u"), new Cos("v"))),
            mul(R, new Sin("v")),
            mul(R, mul(new Sin("u"), new Cos("v")))  ];
}

Ф-я возвращает массив из трех выражений - для x, для y и для z. X у меня идет вправо, Y вверх и Z вдаль. Координата u это долгота, координата v - широта, считается от экватора. Имея эти выражения как три компоненты ф-ии
X(u,v) = [R * cos(u) * cos(v), R * sin(v), R * cos(v) * sin(u)]
первым делом находим базисные вектора - производные X(u,v) по u и по v:
    auto Xu = X.diff("u"); 
    auto Xv = X.diff("v");

Получаем вектора
Xu: [[-1 * R * cos(v) * sin(u)], 0, [R * cos(u) * cos(v)]]
Xv: [[-1 * R * cos(u) * sin(v)], [R * cos(v)], [-1 * R * sin(u) * sin(v)]]
Read more... )
thedeemon: (Default)
Когда читаешь в книжках по теории относительности про искривленное пространство-время, довольно сложно представить себе визуально как это все выглядит. И у меня давно засела в голове затея сделать самому рендерилку каких-нибудь не очень сложных, понятных пространств, где свет двигался бы по геодезическим, как и велит ОТО, увидеть, как это все изнутри смотрится. Потом был пост nponeccop'a, подкинувший идей. И вот, время пришло.
Какие бывают простые искривленные пространства? Одномерные пространства не имеют кривизны. А вот двумерные уже могут. Самое знакомое нам - поверхность сферы. Если двигаешься по сфере прямо, не сворачивая ни влево, ни вправо, на любой плоской карте такой путь будет выглядеть искривленным. Знаете ли вы, что корабль может доплыть из Пакистана на Камчатку, двигаясь по прямой, ни разу не поворачивая? Кстати, что вообще значит "двигаться прямо"? В случае таких вот 2D поверхностей, вложенных в обычное евклидово 3D пространство, ответ довольно простой. Если мы посмотрим на 3-хмерный вектор направления движения, вектор скорости, и посмотрим, как он изменяется по мере движения по нашей траектории на поверхности, возьмем предел разности между новым и старым значеними, это будет вектор ускорения, так вот, это ускорение всегда должно быть направлено ровно "вниз", перпендикулярно касательной плоскости к поверхности, и так в каждой точке пути. В каждой точке мы можем представить систему координат, где две оси лежат в касательной плоскости ("горизонтально"), а третья перпендикулярна поверхности. Такая система ближе всего к тому, как локально для нас поверхность выглядит, и в ней получается, что вектор ускорения в горизонтальных координатах нулевой (ускорение строго вертикально), т.е. какое бы у нас ни было направление движения, оно не меняется. Это называется параллельный перенос. И геодезическая определяется как траектория, получаемая параллельным переносом вектора направления движения вдоль него самого. Движение строго прямо, с сохранением направления движения. Кстати, не всегда это самый короткий путь - из Пакистана на Камчатку можно и покороче добраться, чем вокруг Африки. Геодезическая - это самый прямой путь. На сфере это большие окружности вроде меридианов и экватора. А вот ненулевая параллель - это уже не геодезическая, не прямая, чтобы лететь и на одной параллели оставаться, надо все время заворачивать, что особенно хорошо видно ближе к полюсам.Read more... )

Profile

thedeemon: (Default)
Dmitry Popov

April 2025

S M T W T F S
  1234 5
6789101112
13141516171819
20212223242526
27282930   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 04:55 pm
Powered by Dreamwidth Studios