2015-12-22 54 views
6

我有兩個來源與赤道座標(ra, dec)(ra_0, dec_0)位於距離rr_0,我需要計算它們之間的3D距離。不能再現距離值之間的距離值獲得與astropy

我使用兩種方法,應該給我相同的結果,據我瞭解,但不。

第一種方法是應用astropyseparation_3d函數。第二種方法是使用給出了兩個源之間的距離與球面座標的表達式:

enter image description here

如圖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 
+0

我沒有安裝模塊,但提出了一個建議。你確定'SkyCoord()'完全知道你給它的角度值是多少? – Reti43

+0

它沒有,這就是爲什麼我使用'* u.degree'和'* u.pc'來顯式使用單位的原因。 – Gabriel

回答

9

這與座標系統的一個問題,並且:-)

星芒偏角(星體座標)和θ(球面座標)極角之間的差座標定義爲赤緯爲天球赤道以北,而球面座標定義極座標角度爲θ爲從ver蒂卡爾。

如果您改變alpha_delta_par加入np.pi/2所有的偏角方面考慮到這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.

+1

謝謝科迪! – Gabriel