You are here:
Foswiki
>
Main Web
>
TWikiUsers
>
CezaryMigaszewski
>
ProgramPrecesja
(14 May 2004,
CezaryMigaszewski
)
(raw view)
E
dit
A
ttach
Program liczy współrzędne w układzie równikowym II na zadaną epokę ( dokładną datę ) uwzględniając wpływ precesji. Nutacja została pominięta ( tzn. otrzymane współrzędne są współrzędnymi średnimi ). Program zapyta o datę (dzień, miesiąc,rok) oraz o współrzędne obiektu w epoce standardowej. Epoka standardowa dla programu to epoka J2000.0 . --------------- <verbatim> #include<stdio.h> #include<math.h> #define K1 0.01118086019 #define K2 0.000001464331242 #define K3 0.0000000872664626 #define Z1 0.01118086019 #define Z2 0.000005307546255 #define Z3 0.00000000872664626 #define T1 0.00971717297 #define T2 -0.0000002059488517 #define T3 -0.00000001919862177 #define EPOKA0 2000.0 /*program obliczajacy wspolrzedne rownikowe II na zadana epoke*/ main() { double ksi,z,teta,t,epoka,a,b,c; double p[3][3]; double r0[3],r[3]; double rec0[3],dec0[3],rec[3],dec[3]; double rect0,decl0,rect,decl; int i,j,dni; int data[3]; int miesiace[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; printf("podaj date (dzien, miesiac, rok) "); scanf("%d",&data[0]); scanf("%d",&data[1]); scanf("%d",&data[2]); dni=0; for (i=1; i<data[1]; ++i) { if (data[2]%4==0) dni=dni+miesiace[1][i]; else dni=dni+miesiace[0][i]; } dni=dni+data[0]; epoka=data[2]+dni/365.25; t=(data[2]-EPOKA0)/100+dni/36525; /*katy precesji*/ ksi=K1*t+K2*t*t+K3*t*t*t; z=Z1*t+Z2*t*t+Z3*t*t*t; teta=T1*t+T2*t*t+T3*t*t*t; /*macierz precesji*/ p[0][0]=cos(z)*cos(teta)*cos(ksi)-sin(z)*sin(ksi); p[0][1]=-cos(z)*cos(teta)*sin(ksi)-sin(z)*cos(ksi); p[0][2]=-cos(z)*sin(teta); p[1][0]=sin(z)*cos(teta)*cos(ksi)+cos(z)*sin(ksi); p[1][1]=-sin(z)*cos(teta)*sin(ksi)+cos(z)*cos(ksi); p[1][2]=-sin(z)*sin(teta); p[2][0]=sin(teta)*cos(ksi); p[2][1]=-sin(teta)*sin(ksi); p[2][2]=cos(teta); printf("macierz precesji:\n"); for (i=0; i<=2; ++i) { for (j=0; j<=2; ++j) printf("%18.13f",p[i][j]); printf("\n"); } /*wspolrzedne na epoke 0*/ printf("podaj wspolrzedne w epoce 0 (rektascencje i deklinacje)\n"); printf("rektascencja: h, m, s \n"); for (i=0; i<=2; ++i) scanf("%lf",&rec0[i]); printf("deklinacja: st ' \" \n"); for (i=0; i<=2; ++i) scanf("%lf",&dec0[i]); rect0=rec0[0]+rec0[1]/60+rec0[2]/3600; rect0=rect0*15; rect0=rect0*M_PI/180; decl0=dec0[0]+dec0[1]/60+dec0[2]/3600; decl0=decl0*M_PI/180; /*wektor kierunku na epoke 0*/ r0[0]=cos(decl0)*cos(rect0); r0[1]=cos(decl0)*sin(rect0); r0[2]=sin(decl0); /*wektor kierunku na zadana epoke*/ r[0]=p[0][0]*r0[0]+p[0][1]*r0[1]+p[0][2]*r0[2]; r[1]=p[1][0]*r0[0]+p[1][1]*r0[1]+p[1][2]*r0[2]; r[2]=p[2][0]*r0[0]+p[2][1]*r0[1]+p[2][2]*r0[2]; /*wspolrzedne na zadana epoke*/ decl=asin(r[2]); if ((decl==(M_PI/2)) || (decl==(-M_PI/2))) rect=0.0; else { rect=acos(r[0]/cos(decl)); if ((r[1]/cos(decl))<0) rect=2*M_PI-rect; } decl=decl*180/M_PI; rect=rect*180/M_PI/15; while (rect>24) rect=rect-24; while (rect<0) rect=rect+24; dec[0]=floor(decl); dec[1]=60*(decl-dec[0]); dec[2]=60*(dec[1]-floor(dec[1])); dec[1]=floor(dec[1]); rec[0]=floor(rect); rec[1]=60*(rect-rec[0]); rec[2]=60*(rec[1]-floor(rec[1])); rec[1]=floor(rec[1]); printf("wspolrzedne na epoke %6.1f wynosza:\n",epoka); printf("rektascencja :\n"); printf("%5.0f h %5.0f m %7.2f s\n",rec[0],rec[1],rec[2]); printf("deklinacja : \n"); printf("%5.0f st %5.0f ' %7.2f \"\n",dec[0],dec[1],dec[2]); return 0; } </verbatim> -- Main.CezaryMigaszewski - 11 May 2004
Attachments
1
Attachments
1
Topic attachments
I
Attachment
Action
Size
Date
Who
Comment
out
precesja.out
manage
16.5 K
14 May 2004 - 15:11
CezaryMigaszewski
Plik wykonywalny programu precesja
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r2
<
r1
|
B
acklinks
|
V
iew topic
|
Edit
w
iki text
|
M
ore topic actions
Topic revision: r2 - 14 May 2004,
CezaryMigaszewski
Main
Log In
or
Register
Toolbox
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
Users
Groups
Webs
Cosmo
Main
Sandbox
System
English
Français
Polski
Copyright © CC-BY-SA by the contributing authors. All material on this collaboration platform is copyrighted under CC-BY-SA by the contributing authors unless otherwise noted.
Ideas, requests, problems regarding Foswiki?
Send feedback