我正在構建一個將軌道元素轉換爲笛卡爾座標的程序。將三個函數合併爲一個
我想創建一個這樣做的函數,將軌道元素轉換成cartisian座標,但是我無法讓它工作。這是我第一次使用fortran,所以我仍然習慣它。
program conversion
implicit none
real*8 :: EC, A, IC, OM, W, TA, X, Y, Z
real*8, external :: XCARTISIAN, YCARTISIAN, ZCARTISIAN, r
print *, "Insert Oribtal Elements (EC, A, IC, OM, W, TA): "
read *, EC, A, IC, OM, W, TA, X, Y, Z
X = XCARTISIAN(EC, A, IC, OM, W, TA)
Y = YCARTISIAN(EC, A, IC, OM, W, TA)
Z = ZCARTISIAN(EC, A, IC, OM, W, TA)
print *, "X : ", X, "Y : ", Y, "Z : ", Z
end program conversion
real*8 function XCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: XCARTISIAN, r
r = A(1-EC**2)/(1+EC*COS(TA))
XCARTISIAN = r(COS(OM)*COS(W+TA)-SIN(OM)*SIN(W+TA)*COS(IC))
return
end function XCARTISIAN
real*8 function YCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: YCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
YCARTISIAN = r(SIN(OM)*COS(W+TA)+COS(OM)*SIN(W+TA)*COS(IC))
return
end function YCARTISIAN
real*8 function ZCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: ZCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
ZCARTISIAN = r(SIN(W+F)*SIN(IC)
return
end function ZCARTISIAN
我怎樣才能使這個工作,並做一個單獨的功能,而不是三個獨立的單獨的X,Y和Z單獨的?
的轉換公式如下:
X = r(COS(OM)*COS(W+TA)-SIN(OM)*SIN(W+TA)*COS(IC))
Y = r(SIN(OM)*COS(W+TA)+COS(OM)*SIN(W+TA)*COS(IC))
Z = r(SIN(W+F)*SIN(IC)
其中,
r = A(1-EC**2)/(1+EC*COS(TA))
歡迎。針對所有Fortran問題使用標籤[tag:fortran]。如果您需要區分特定版本,則可以添加版本。 –
你不能改變你的問題!你不能使現有的答案無效。 –
對不起,但在過去的問題中,人們告訴我當新問題出現時更新當前問題。我一直在大吼大叫,因爲沒有更新主要問題和更新問題... –