我有一组给定here的数据,其中第一列和第二列分别有天空坐标(ra,dec),第三和第四列是笛卡尔系统中的坐标(x, Y)。
我需要使用坐标x
和y
制作二维插值曲面,使用Ra
和Dec
创建另一个插值曲面。问题是掩模区域的存在,如上图所示。我可以通过绘制它们来说明缺失的数据(目录中有非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
的值,即使在蒙版区域中也是如此(来自{ {1}}和x
到y
和ra
)?
答案 0 :(得分:1)
如果我做得对,那就是这样的:
将笛卡尔坐标系移动到 CCD 的中间位置,并将Equatoreal坐标移动到 CCD 的中间位置。然后单独计算x,y
。您唯一需要的是为f
和x
分别计算焦距y
!!!
pos
是笛卡尔坐标(x或y)
ang
是等长坐标(RA或Dec)
从数据库获取边缘点
将角度移至 CCD
从中计算焦点(fx,fy)
f = pos/tan(ang)
现在您可以计算数据集中任何条目的投影
将角度移至 CCD 的中间,然后按
计算x,y
pos=f*tan(ang)
从 CCD 中间转换回原始笛卡尔坐标。如果这种方法正确,你应该检查几点
<强> [注释] 强>
x
轴会在您的输出中进行镜像,因此只需在末尾使用x=-x
,然后再切换回原始笛卡尔坐标或使焦点f
为负。
如果你的 CCD 不与赤道轴对齐,那么你需要计算旋转(X
轴和赤道之间的角度)并在转换后在Z
轴周围应用旋转在转回之前...