The programming steps to get a planet’s position
% V$ ^; ^4 S8 oTo compute a celestial body6 m4 E1 \, W8 T2 b
or point with SWISSEPH, you have to do the following steps (use swetest.c as an example). The details of the functions will be explained in the following chapters.# m# K9 y, J8 x2 D
6 i3 O( ^, w* C& E% y" b% `8 g5 l
1.
% P3 b( ?% M" ?* m6 hSet the directory path of the ephemeris files, e.g.: * e8 T3 {6 H- `% W4 a
$ z) E$ j0 ^5 G0 j$ V+ M6 Z; U
swe_set_ephe_path(”C:\\SWEPH\\EPHE”);2 z( F7 i, [/ y% j5 ] W
, }8 W1 u5 g- \2..
6 v" f! {/ c2 Q5 c* k! [From the birth date, compute the Julian day number:1 T: p" m/ O- A" R+ W# K7 x
. f1 Y& N+ E& }( @& \6 |- }% E0 kjul_day_UT = swe_julday(year, month, day, hour, gregflag);
) U3 w+ h* h, H) ?3 Z
1 f/ X; z" p: A! N V5 Y3.., t9 [0 s7 O6 c
Compute a planet or other bodies:
2 N$ j! W! F& ] G
8 e3 ]2 a4 g# k4 ^8 r1 Aret_flag = swe_calc_ut(jul_day_UT, planet_no, flag, lon_lat_rad, err_msg);
4 z& k2 M) [2 |' ]! ?
5 Z5 O& _# ]) _' \* o& ^or a fixed star:) N1 U) I/ F1 l9 L
4 c- l0 \" u& Z% R) @, X( p1 h+ Sret_flag = swe_fixstar_ut(star_nam, jul_day_UT, flag, lon_lat_rad, err_msg);
& w+ g2 T" ]2 T& W4 \
: B* V; p) L4 F$ I1 n. `& m
4 f' C) ?' T' E5 b3 p, G5 @( N* C5 cNote:
& N: h% \7 |0 i" w. g1 ^6 G2 O1 w( Y$ T5 j
The functions swe_calc_ut() and swe_fixstar_ut() were introduced with Swisseph version 1.60., h% K8 L# B/ R1 G# ^
$ I5 ], ^6 X; W# \; S
If you use a Swisseph version older than 1.60 or if you want to work with Ephemeris Time, you have to proceed as follows instead:' S( W1 r( Q8 q0 H I* b
7 |7 m- O* q* i- Q a# b d& V* V6 N5 K" u; i( \( z9 W
First, if necessary, convert Universal Time (UT) to Ephemeris Time (ET):
( c% f. p" ~7 L& N# O/ p% _, X: F
+ V m) P a8 A* S% f+ Pjul_day_ET = jul_day_UT + swe_deltat(jul_day_UT);
/ ]$ A( K& H) c' t# R1 r- l4 r
5 d, D5 k- Z6 u; V& }! Z0 p. m. i# u* a+ N8 d* Q; F0 I" Q/ F. j5 q
Then Compute a planet or other bodies:0 I0 y0 a; \4 J N4 x) r( l6 ~
3 L7 }/ G9 I+ a L
ret_flag = swe_calc(jul_day_ET, planet_no, flag, lon_lat_rad, err_msg); 7 Q7 B. o( [2 Z4 I$ n9 J
- [; n2 t6 ]0 J) F. ]or a fixed star:7 u! h3 F, O6 S c9 d+ E
9 I% n* Y9 I4 s
ret_flag = swe_fixstar(star_nam, jul_day_ET, flag, lon_lat_rad, err_msg);
8 h5 o4 v& I% g' M3 K
" p/ F! x( ]8 `# ~/ i( D" ]5..# T! Q1 e" H' K3 r3 _3 @" Y- x
At the end of your computations close all files and free memory calling swe_close();. u! `1 z5 _6 L' l' a
* Y9 s* i' Z% Z& B# I5 {( aHere is a miniature sample program, it is in the source distribution as swemini.c' Y' g' H0 B/ y- P
7 Z) N; T6 ]! b#include "swephexp.h"
/ e" g7 B1 O. t( e: Z/* this includes
6 ]+ t; J8 i2 ]' l- o( H& T- j"sweodef.h" */" y3 Y- X; ~6 t. J0 U' E
int main()
2 |1 O* H3 r$ M1 R5 I7 I4 v{9 X9 [. V, L6 V& b+ O
4 d! c, B6 |& d7 P; K+ ?0 D' ochar *sp, sdate[AS_MAXCH], snam[40], serr[AS_MAXCH];6 H! p% r! {: p9 t- }
* f4 s0 \2 b& i3 {& t: H, W- |( U$ `9 M3 _! ?$ n
int jday = 1, jmon = 1, jyear = 2000;
1 a$ @% e) J2 G* d( x) A0 A
( C5 w+ d, Q" V0 T# @5 o7 G: O# hdouble jut = 0.0;# ?: j$ a# l$ W, O3 @- O+ q+ K
7 b9 S! a2 J4 m% A
double tjd_ut, te, x2[6];- U' P1 M& P3 [0 P% Z- u( } f6 o
: F0 F! n8 o% L% ?
long iflag, iflgret;
- b+ c0 ]* _% ~3 C/ P3 q
5 S6 W3 }8 e0 }) ] t" [int p;
. f9 `' n G% J9 J0 g, X: Z1 w+ Q
iflag = SEFLG_SPEED;1 B* i! w6 m6 |7 X* Z
5 z% ^0 o$ q% E- g. U) }: U3 ewhile (TRUE) {
% X# h+ [& X* _- P. X1 v* ~# h( y# T& E" {5 S/ c
printf("\nDate (d.m.y) ?");$ o1 T+ p4 R/ W$ _
% \5 G+ r0 h0 N- R9 z; p
gets(sdate);
$ j% l& G+ j" j! S& Q+ \: V$ G# Y7 I1 j! [0 @4 H' a6 g9 U7 i8 U; @2 {
/* stop if a period . is entered */2 U- s) ]# R# e5 q) w: H
6 E% i% ]" ]( u1 r ~" Y
if (*sdate == '.')
* P5 @4 O p' X$ v0 r* y, J
y& f1 T; v' c, yreturn OK;
, Z# \) |2 I! ^( V5 ]1 O9 r( U4 _- s& [# F& @+ c& z
if (sscanf (sdate, "%d%*c%d%*c%d", &jday,&jmon,&jyear) < 1) exit(1);
3 \0 B: ~; s+ _& P4 E, S9 o: N4 J, I# X% S7 |4 z
; c( C% [' M+ F, v& R
/*, Q( f, \$ q( H8 O
) [- \3 X( g8 E8 d) B; O
6 r' k1 j# _ s' t: \8 R
* we have day, month and year and convert to Julian day number5 R8 ? m' S6 \! u
2 h3 v! P% `4 _4 r0 I
" `# U+ I$ g* ]5 V% }*/
8 M ~6 {8 L2 g3 z% S1 \$ O; l* W6 v4 R
tjd_ut = swe_julday(jyear,jmon,jday,jut,SE_GREG_CAL);
( \* b7 E$ s l. G* h" d! H
; L, h+ y5 Z. X/ E3 |% j" ~, b) w5 ]! }
" [" X# A9 N, J# _0 d+ ]: _. G
/*
1 q, I& h# w; D' C* J
6 T3 u4 ~+ @9 d5 r8 I1 `" B
' h9 I0 @4 `+ }% A' P* compute Ephemeris from Universal by adding delta_t. o, y+ b' a! Z2 P' E5 r$ I
/ G" U4 c% {* h3 h" S
( v6 d5 X8 H5 }* u5 e
* not required for Swisseph versions smaller than 1.600 R5 A/ y' s) T% _7 I8 H
& v, n+ w/ g6 z" u7 B* n, a- v/ x
2 ~( i/ A$ l: p% b# y- _
*/% M4 b6 h4 v& J4 w8 ]) V
( ` R% w6 J- H+ Q5 f
/* te = tjd_ut + swe_deltat(tjd_ut); */
+ l. ~1 N* s" J( e) a
* S+ B; w2 Z5 O* u" ^$ Aprintf("date: %02d.%02d.%d at 0:00 Universal time\n", jday, jmon, jyear);1 S+ J/ G5 ]2 [
) Q: y0 X7 i, A/ l8 t
printf("planet
1 p7 V# j: D, ], {( L\tlongitude\tlatitude\tdistance\tspeed long.\n");. X5 d* G# C) |4 K
+ t# c, e2 w8 t0 A& F
3 j3 N4 k J. i# [3 j! a2 {
/*- ?. [1 }1 C7 T1 } m: ]0 a
; J G- P4 {: y1 p3 }2 ]
h' F' Z3 W4 ?4 p* w/ @- N1 w6 S( _$ p* a loop over all planets) C2 E( I% M& A# D1 L' W
% R v% N, s. N* e6 l6 H* G* O) v r3 {# e }" n
*/8 c4 M' ]! h& D
4 k$ m+ u# v. g5 U l8 X
for (p = SE_SUN; p <= SE_CHIRON; p++) {
8 B! {& ^9 X+ h% A; s5 d( ^% ~
5 N5 e _8 M7 Y, i2 [" P$ jif (p == SE_EARTH) continue;5 r* @$ E8 F# D# E: }9 ^
) b" \* w) o7 W' T; d) [$ @
/* t4 @ t* X- `/ |) v
1 k. x# B& Z: A! Y9 P
. j _0 N) r/ I7 ^3 O* do the coordinate calculation for this planet p) Y5 g- L. j4 P0 ^" Z
: z: e1 C8 b, U3 T* P
+ {$ M) J4 B) F' Z8 d! z4 R% O
*/
9 E3 f% ^3 B( ]+ T L6 M; k2 Wiflgret = swe_calc_ut(tjd_ut, p, iflag, x2, serr);
, J0 }# v! B" G' c8 X g2 Z V# m" K* _! X V' q
1 c w7 @0 S# a- g8 X2 X: C
/* Swisseph versions older than 1.60 require the following @$ L. h/ b4 b4 H
- ^% ^. }* I6 }& j, F' w- u
* statement instead */
( m) b9 T+ T4 s5 V% w/* iflgret = swe_calc(te, p, iflag, x2, serr); */- s/ a; w1 X% Q9 e& v1 g, m
7 i0 v( u: X% F9 Q8 C w* K/ R# I
/*
# Y% q( n0 r( v. m* n
+ g R: J+ E* [
' i N/ z# w% s( s! I* y* if there is a problem, a negative value is returned and an " |8 p/ Y- [ ]( p$ Y/ Y5 F* A
- D& i2 s# \# S. }9 y' _* Q
k0 M& R2 w' [0 s) n* error message is in serr.
2 E7 S8 {* I6 W% `3 [$ O) z4 g4 ~- }8 R8 E6 Y3 s
G p( w9 o' f9 x; W( X, o* O2 g*/* x$ i2 ?8 v2 p; t6 H! Z
; o( P5 w1 V% x: B# I! J
if (iflgret < 0) 9 B# B. f# ^8 M1 p) g5 _
/ u. P3 J- w' V5 D% \0 ~printf("error: %s\n", serr);. k" h! q1 a' T# z' n
) \) ?3 k ]8 |$ Z6 ~' m) g$ |" A* e2 z5 e+ A1 q; d
/*
9 h: ~/ r9 B' p9 `" @: x! N8 i9 s1 K9 U2 o0 r1 g
" G/ u' F, J b& K: \9 y/ [ Z8 ~* get the name of the planet p7 }3 ?! p* a2 y; k) Y
3 P o5 n5 m+ b8 ]1 K, K
. V1 e. i4 n& U& M/ K*/
0 j2 v+ B7 T* l U" y1 `9 h% }6 H
swe_get_planet_name(p, snam);6 }9 P% t0 ^0 i8 n/ _/ W! F
/ {% g1 e* M5 ^& F8 v4 X( B- S* @4 I; D& A/ x' Q
/*
, T8 z& \' _2 y2 W# V. [" f( ~) U# V- U; y$ G
" a. h; M% e9 Q! v/ s
* print the coordinates
+ n& M: s& c0 D0 L- z! P8 ]0 {) R/ O6 r- {% ~
8 K1 a' H& Q( s7 i J3 t
*/* @' R! M' T* o
# C( @& C6 Y z; N7 n& j0 K% ^% xprintf("%10s\t%11.7f\t%10.7f\t%10.7f\t%10.7f\n",& O5 v' ^# `* R9 w
9 \* f% x6 G- G+ l* Z6 u4 A( Y2 F& F& N
snam, x2[0], x2[1], x2[2], x2[3]);! H5 g2 j* R- |3 _& l# C
$ {) w4 @7 n. ?' S
}1 |; E x. p5 W" R( Q. _
& a- I0 k7 _8 @0 o. Y( Y' ?
}
9 s7 r# ?8 O) v3 m- l: p% h7 ?
: N" d8 f4 _2 L0 \$ K$ preturn OK;0 r3 Z+ s9 u* H) ^% J+ U
} |