我有一组数据 here其中第一列和第二列分别是天空坐标 (ra,dec),第三列和第四列分别是笛卡尔坐标系 (x,y) 中的坐标。
我需要使用坐标 x
制作一个二维插值曲面和 y
另一个使用 Ra
和 Dec
.问题是masked region的存在,如上图所示。我可以通过绘制它们来说明缺失的数据(目录中没有 NaN
值)。这是我迄今为止尝试过但没有给出正确答案的方法:
from scipy.interpolate import griddata
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('test.asc')
ra = data[:,0]
dec = data[:,1]
Xpos = data[:,2]
Ypos = data[:,3]
xi = np.linspace(Xpos.min(), Xpos.max(), 1000)
yi = np.linspace(Ypos.min(), Ypos.max(), 1000)
xi, yi = np.meshgrid(xi, yi, copy=False)
ra_int = griddata(data[:,2:4], ra, (xi.flatten(), yi.flatten()),
method='cubic')
dec_int = griddata(data[:,2:4], dec, (xi.flatten(), yi.flatten()),
method='cubic')
使用 griddata
失败并只返回 NaN
值。有什么方法可以进行这种插值以估计 Ra
的值吗?和 Dec
来自给定的 x
和 y
坐标甚至在掩蔽区域(从 x
和 y
映射到 ra
和 dec
)?
最佳答案
如果我做对了,那就是这样的:
只需将笛卡尔坐标系移动到CCD 的中间,同时将赤道坐标移动到CCD 的中间。然后分别计算 x,y
。您唯一需要做的就是分别为 x
和 y
计算焦距 f
!!!
pos
是笛卡尔坐标(x 或 y)
ang
为赤道坐标(赤经或赤经)
从数据库获取边缘点
将角度移到CCD
的中间从中计算焦点
(fx,fy)
f = pos/tan(ang)
现在您可以计算数据集中任何条目的投影
将角度移动到 CCD 的中间,然后计算
x,y
pos=f*tan(ang)
从 CCD 中间移回原始笛卡尔坐标。如果这种方法正确,你应该检查几点
[注释]
x
轴在您的输出中是镜像的,因此只需在最后使用 x=-x
,然后再移回原始笛卡尔坐标或离开焦点 f
否定。
如果您的 CCD 轴未与赤道对齐,那么您需要计算旋转(X
轴与赤道之间的角度)并围绕 Z< 进行旋转
转换后的轴在移回之前...
关于python - 尽管有 mask 区域,但从一个平面映射到另一个平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623926/