无法重现通过 astropy 获得的源之间的距离值
Can't reproduce distance value between sources obtained with astropy
我有两个来源,赤道坐标为 (ra, dec)
和 (ra_0, dec_0)
,距离 r
和 r_0
,我需要计算它们之间的 3D 距离。
我使用了两种方法,据我所知,应该给出相同的结果,但没有。
第一种方法是应用astropy's 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.
我有两个来源,赤道坐标为 (ra, dec)
和 (ra_0, dec_0)
,距离 r
和 r_0
,我需要计算它们之间的 3D 距离。
我使用了两种方法,据我所知,应该给出相同的结果,但没有。
第一种方法是应用astropy's 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.