2016-06-26 5 views
1

私はPythonで特定のフィールドを再マップしようとしていますが、それについての方法はわかりません。トピックは重力レンズに関するものです。だから私が今まで行ってきたことは、光が大衆の周りでどのように曲がっているかを示す偏向フィールドを得ることです。 Deflection Field MapPythonでのフィールドのマッピング

これを使用して、私は、最も明るい画像を生成する領域を示す拡大図と呼ばれるものを得ました。色が赤くなればなるほど、画像は明るくなります。 Magnification Map今、私は倍率マップから偏向フィールドを差し引いて、別の平面で別のマッピングを取得します。

偏向フィールドが2次元ベクトルであるため、これについてどうやって行くのか分かりません。したがって、deflection_xとdeflection_yは2つの配列になります。一方、倍率は、2次元X-Yグリッド内の各グリッドポイントに割り当てられた値だけです。私がやろうとしていることをもう一度言い換えるもう一つの方法は次の通りです。倍率をIとする。

だから今私は(x、y)を持っている。私はI(x - (deflection_x)、y - (deflection_y))を取得したい。基本的には、曲線はオレンジ色で、新しいxとyの位置で別の曲線になりますが、同じ大きさです。私は以下の私の現在のコード与えてくれた:

倍率は、このステップは、I.からalpha_xとalpha_yを減算することで後に私が何をしたい、コードの演算部を心配しないでくださいI.で与えられる
x = np.linspace(-50,50,100) 
y = np.linspace(-50,50,100) 
X, Y = np.meshgrid(x,y) 
zeta_a = (-3,0) 
zeta_b = (3,0) 
def get_dist_squared(x_array, y_array): 
return x_array**2 + y_array**2 
M_a= 150 
M_b= 150 
G = 1 
c = 1 
zeta_min_zeta_a_x = X - zeta_a[0] 
zeta_min_zeta_a_y = Y - zeta_a[1] 
zeta_min_zeta_b_x = X - zeta_b[0] 
zeta_min_zeta_b_y = Y - zeta_b[1] 
dist_zeta_min_zeta_a = get_dist_squared(zeta_min_zeta_a_x,zeta_min_zeta_a_y) 
dist_zeta_min_zeta_b = get_dist_squared(zeta_min_zeta_b_x,zeta_min_zeta_b_y) 
alpha_x = M_a * zeta_min_zeta_a_x/dist_zeta_min_zeta_a 
alpha_x += M_b * zeta_min_zeta_b_x/dist_zeta_min_zeta_b 
alpha_x *= 4 * G/(c**2) 
alpha_y = M_a * zeta_min_zeta_a_y/dist_zeta_min_zeta_a 
alpha_y += M_b * zeta_min_zeta_b_y/dist_zeta_min_zeta_b 
alpha_y *= 4 * G/(c**2) 
alpha_x_y, alpha_x_x = np.gradient(alpha_x,edge_order=1) 
alpha_y_y, alpha_y_x = np.gradient(alpha_y,edge_order=1) 
det_A = 1 - alpha_y_y - alpha_x_x + (alpha_x_x)*(alpha_y_y) - (alpha_x_y)*(alpha_y_x) 
abs = np.absolute(det_A) 
I = abs**(-1.) 

alpha_xとalpha_yは、x軸とy軸のたわみです。

私が試したことから、単純にI - alpha_xとI - alpha_yを行い、これをプロットすることは役に立ちません。これは、差し引かれるべき倍率の値ではなく、単に倍率の位置である。

ありがとうございます!私は本当にアドバイスをお願いします。

+0

あなたのイメージの翻訳が必要な場合は分かりませんでした(ポイントI(x、y)はI(x-alpha_x、y-alpha_y)になります))またはポイントのIの新しい計算x-alpha_x、y-alpha_y。最初のオプションであれば、これはプロットの問題であり、任意の数のプロットエンジンで簡単に行うことができます。後者の場合は、新しいI値をどのように「推定」するか(存在しないため)を明記しなければなりません。 – armatita

+0

@ armatitaでは、Iの値は変わらず、単に新しい座標に変換する必要がある位置です。各I(x、y)は今ではI(x-alpha_x、y-alpha_y)である必要がありますが、「I」は同じです。だから私はこれが最初のオプションと同じだと推測していますが、これをどうやって行うのでしょうか? @Benjamin、私はすでにmeshgridを使っていますが、どういう意味ですか? – ThunderFlash

答えて

1

np.meshgridから直接減算した後、新しい座標系に関してIを再配置するだけでした。私は、関係するすべてのコンポーネントのために混乱していると思う。ご協力いただきありがとうございます!

関連する問題