You are here:
Foswiki
>
Main Web
>
TWikiUsers
>
CezaryMigaszewski
>
ProgramPrecesja
(revision 1) (raw view)
Edit
Attach
Program liczy współrzędne w układzie równikowym II na zadaną epokę ( dokładną datę ). 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
Edit
|
Attach
|
P
rint version
|
H
istory
:
r2
<
r1
|
B
acklinks
|
V
iew topic
|
Edit WikiText
|
More topic actions...
Topic revision: r1 - 11 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