我有两个赤道坐标(ra,dec)和(ra_0,dec_0)位于距离r和r_0的源,我需要计算它们之间的3D距离.
我使用两种方法,据我所知,应该给出相同的结果,但不是.
第一种方法是应用astropy的separation_3d功能.第二种方法是使用表达式给出两个具有球面坐标的源之间的距离:
如here所示.
在下面的MCVE中,返回的值是:
91.3427173002 pc 93.8470493776 pc
这两个值不应该相等吗?
MCVE:
from astropy.coordinates import SkyCoord from astropy import units as u import numpy as np # Define some coordinates and distances for the sources. c1 = SkyCoord(ra=9.7*u.degree,dec=-50.6*u.degree,distance=1500.3*u.pc) c2 = SkyCoord(ra=7.5*u.degree,dec=-47.6*u.degree,distance=1470.2*u.pc) # Obtain astropy's distance between c1 & c2 coords. print c1.separation_3d(c2) # Obtain distance between c1 & c2 coords using explicit expression. ra_0,dec_0,r_0 = c1.ra.radian,c1.dec.radian,c1.distance ra,dec,r = c2.ra.radian,c2.dec.radian,c2.distance alpha_delta_par = np.sin(dec) * np.sin(dec_0) * np.cos(ra - ra_0) +\ np.cos(dec) * np.cos(dec_0) d_pc = np.sqrt(r**2 + r_0**2 - 2*r*r_0*alpha_delta_par) print d_pc
解决方法
这是坐标系的问题,赤纬(星体坐标)和极角θ(球面坐标)之间的差异:-)
星体坐标将赤纬定义为天体赤道的北部,而球面坐标将极角θ定义为从垂直向下.
如果您通过在所有赤纬项中添加np.pi / 2来更改alpha_delta_par以解释此90°差异,则会得到
alpha_delta_par = np.sin(np.pi/2 + dec)*np.sin(np.pi/2 + dec0)*np.cos(ra - ra0) +\ np.cos(np.pi/2 + dec)*np.cos(np.pi/2 + dec0)
这给出了正确的结果:91.3427173002 pc.
原来物理学家通常使用符号θ作为极角,而数学家通常使用φ;我和θ一起去,因为我跟着我的心. I’m not making this up I swear.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。