每个像素的idl半径

时间:2016-06-28 21:27:04

标签: astronomy idl-programming-language

我对编码完全陌生,几乎不知道我在做什么。目前,我试图在拟合文件中找到星系中心的每个像素的半径。我被告知要通过创建一个与适合文件大小相同的空白数组来尝试这个,并且我试图为每个x值使用for循环,为每个y使用另一个x循环。到目前为止,我有数组并试图创建for循环。

xcenter =249.8
ycenter =250.0

d=fltarr(500,500)

for i=0,499 do begin
    d=d(i-xcenter,*)
endfor

for j=0,499 do begin
    d=d(j-ycenter,*)
endfor

我知道这看起来很糟糕,我显然不知道我在做什么。所以,如果有人能提供任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

让我们先看一个更简单的版本。假设您在一条线上有10个点,并且您想要计算每个点与某些xref的距离。 IDL支持矢量数学,因此您可以这样做:

xref = 5.4
x = dindgen(10)
distance = abs(x - xref)

我在这里使用了DINDGEN命令,您可以查找帮助。现在在2d情况下,你想要2维数组:一个是500 * 500数组,包含每个像素的X坐标,另一个包含Y坐标。所以数组必须是格式,

0 1 2 3 ...
0 1 2 3 ...
0 1 2 3 ...

0 0 0 0 ...
1 1 1 1 ...
2 2 2 2 ...

我们可以使用#运算符生成它们。请注意,IDL默认从0开始计数。

just_one = replicate(1d, 500) ; contains 1 1 1 1 ...
one_500 = dindgen(500)        ; contains 0.0 1.0 2.0 ...
x = just_one # one_500
y = one_500 # just_one

现在您可以像往常一样计算距离,d = sqrt(x x + y y),但再次使用矢量数学:

distance = sqrt( (x - xref) ^ 2 + (y - yref) ^ 2 )

这是一个500x500阵列,其中包含每个像素与外部参照,yref点的距离。