Изменение карты координат в зависимости от ее координат (гравитационное линзирование)
Я пытаюсь вычислить оптическое явление под названием гравитационное лицензирование. Проще говоря, когда массивный объект (или с массивной массой) находится между мной как наблюдателем и звездой или каким-то источником света. Из-за своей огромной массы свет будет искривляться, и для нас он, очевидно, придет из другого места, чем его реальное положение. Существует частный случай (и более простой), когда мы предполагаем, что масса сферическая, поэтому с нашей точки зрения она круглая в 2D плоскости (или на фотографии).
Моя идея для кода, который изменял координаты 2D-плоскости в зависимости от того, где мой источник освещает ее. Другими словами, если у меня есть источник сферического света, если он находится далеко от моего массивного объекта, он не будет отображать никаких изменений, но если он будет близок к телесной массе, он изменится (фактически, если он находится точно за массивным объектом, наблюдатель увидит кольцо Эйнштейна).
Для вычисления, что я сначала напишу отображение этой функции. Я беру приближение a = x + sin(t)/exp(x) , b = y + cos(t)/exp(y)
, Поэтому, когда источник света находится далеко от массы, экспонента будет приблизительно равна нулю, а если он находится сразу за массой, то координаты источника света будут (0,0), поэтому изображение вернется (sin(t),cos(t)) круг Эйнштейна, который я должен был получить.
Я кодирую это таким образом, сначала я определяю свое приближение:
def coso1(x,y):
t = arange(0,2*pi, .01);
a = x + sin(t)/exp(x)
b = y + cos(t)/exp(y)
plt.plot(a,b)
plt.show()
Затем я пытаюсь построить это, чтобы увидеть, как меняется карта координат:
from numpy import *
from matplotlib.pyplot import *
x=linspace(-10,10,10)
y=linspace(-10,10,10)
y = y.reshape(y.size, 1)
x = x.reshape(x.size, 1)
plot(coso1(x,y))
И я получаю этот сюжет.
Обратите внимание, что это выглядит так, потому что интервал, который я выбираю, принимает значения для координат x и y. Если я буду иметь место в "пограничном" случае, когда x={-1,0,1} и y={-1,0,1}, это покажет, как пространство было деформировано (или я предполагаю, что это то, что я видя).
У меня тогда есть несколько вопросов. Простой вопрос, но я не нашел простого ответа, если я смогу манипулировать этим преобразованием (вращайте мышью, чтобы определить деформацию, контролирующую способ изменения x или y). И два трудных вопроса: могу ли я нарисовать линии счетчика, чтобы увидеть, как точно меняется топография моей карты на каждом уровне x (предположим, я позволю y быть постоянным), и другой вопрос: если это мой "новый" способ о том, как карта действует, могу ли я использовать эту новую карту координат в качестве инструмента, где если проект любого изображения, оно будет искажено в функции этой "новой" карты. Что-то аналогичное тому, как камеры работают с эффектом рыбьей линзы.