我正在尝试计算称为引力透镜的光学现象。简而言之,当一个巨大的物体(或具有巨大质量的物体)位于我作为观察者和一颗恒星或某种光源之间时。因为它的质量很大,所以光线会弯曲,对我们来说,它显然来自另一个位置,而不是它的真实位置。有一种特殊情况(更简单),我们假设质量是球形的,所以从我们的角度来看,它在 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 保持不变),以及另一个问题:如果这是我的“新”方式关于地图的作用,我可以使用这个新的坐标图作为工具,如果投影任何图像,它将在这个“新”地图的功能中失真。类似于相机如何使用鱼眼镜头效果的东西。