Professional Documents
Culture Documents
Parent Directory |
Revision Log
5:00
6:00
13:00
14:00
15:00 thamer 10316
17:00
18:00
19:00
20:00
21:00
22:00
23:00
24:00:00
25:00:00
26:00:00 thamer 10316
27:00:00
28:00:00
29:00:00
30:00:00
31:00:00
32:00:00
33:00:00
37:00:00
38:00:00
40:00:00
41:00:00
42:00:00 thamer 10490
44:00:00
45:00:00
46:00:00
47:00:00
48:00:00
49:00:00
66:00:00
67:00:00
68:00:00 thamer 10316
70:00:00
71:00:00 thamer 10998
72:00:00
76:00:00
77:00:00
78:00:00
79:00:00 thamer 10998
80:00:00
81:00:00
82:00:00
83:00:00
84:00:00 thamer 10325
97:00:00
98:00:00
99:00:00
100:00:00
101:00:00
102:00:00 thamer 10998
103:00:00
104:00:00 thamer 10742
105:00:00
106:00:00
107:00:00
108:00:00
109:00:00
110:00:00
113:00:00
114:00:00 thamer 10742
115:00:00
118:00:00
119:00:00
120:00:00
121:00:00
122:00:00
126:00:00
127:00:00
128:00:00
129:00:00
130:00:00
131:00:00
132:00:00
133:00:00
136:00:00
137:00:00
138:00:00
139:00:00
140:00:00
141:00:00
142:00:00
143:00:00
144:00:00
145:00:00
148:00:00
149:00:00
152:00:00
153 :
154 :
155 :
156 :
158 :
159 :
160 : thamer 10742
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
212 :
213 :
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 :
224 :
225 :
226 :
227 :
228 :
229 :
230 :
231 :
232 :
233 :
234 :
235 :
236 :
237 :
238 :
239 :
240 :
241 :
242 :
243 :
244 :
245 :
246 :
247 :
248 :
249 :
250 :
251 :
252 :
253 :
254 :
255 :
256 :
257 :
258 :
259 :
260 :
261 :
262 : thamer 10742
263 :
264 :
265 :
266 :
267 :
268 :
269 :
270 :
271 :
272 :
273 :
274 :
275 :
276 :
277 :
278 :
279 :
280 :
281 :
283 :
284 : thamer 10742
290 :
291 :
292 :
293 :
294 :
295 :
296 :
297 :
298 :
299 :
300 :
301 :
302 :
303 :
304 :
305 :
306 :
307 :
308 :
309 :
310 :
311 :
312 :
313 :
314 :
315 :
316 :
317 :
318 :
319 :
320 :
321 :
322 :
323 :
324 :
325 :
326 :
327 :
328 :
329 :
330 :
331 :
332 :
333 :
334 :
335 :
336 :
337 :
338 :
339 :
340 :
341 :
342 :
343 :
344 :
345 :
346 :
347 :
348 :
349 :
350 :
351 :
352 :
353 :
354 :
355 :
356 :
357 :
358 :
359 :
360 :
361 :
362 :
363 :
364 :
365 :
366 :
367 :
368 :
369 :
370 :
371 :
372 :
373 :
374 :
375 :
376 :
377 :
378 :
379 :
380 :
381 :
382 :
383 :
384 :
385 :
386 :
387 :
388 :
389 :
390 :
391 :
392 :
393 :
394 :
395 :
396 :
397 :
398 :
399 :
400 :
401 :
402 :
403 :
404 :
405 :
406 :
407 :
408 :
409 :
410 :
411 :
412 :
413 :
414 :
415 :
416 :
417 :
418 :
419 :
420 :
421 :
422 :
423 :
424 :
425 :
426 :
427 :
428 :
429 :
430 :
431 :
432 :
433 :
434 :
435 :
436 :
437 :
438 :
439 :
440 :
441 :
442 :
443 :
444 :
445 :
446 :
447 :
448 :
449 :
450 :
451 :
452 :
453 :
454 :
455 :
456 :
457 :
458 :
459 :
460 :
461 :
462 :
463 :
464 :
465 :
466 :
467 :
468 :
469 :
470 :
471 :
472 :
473 :
474 :
475 :
476 :
477 :
478 :
479 :
480 :
481 :
482 :
483 :
484 :
485 :
486 :
487 :
488 :
489 :
490 :
491 :
492 :
493 :
494 :
495 :
496 :
497 :
498 :
499 :
500 :
501 :
502 :
503 :
504 :
505 :
506 :
507 :
508 :
509 :
510 :
511 :
512 :
513 :
514 :
515 :
516 :
517 :
518 :
519 :
520 :
521 :
522 :
523 :
524 :
525 :
526 :
527 :
528 :
531 :
532 :
533 :
534 :
535 :
536 :
537 :
538 :
539 :
540 :
541 :
542 :
543 :
544 :
545 :
546 :
547 :
548 :
549 :
550 :
551 :
552 :
553 :
554 :
555 :
556 :
557 :
558 :
559 :
560 :
561 :
562 :
563 :
564 :
565 :
566 :
567 :
568 :
569 :
570 :
571 :
572 :
573 :
574 :
575 :
576 :
577 :
578 :
579 :
580 :
581 :
582 :
583 :
584 :
585 :
586 :
587 :
588 :
589 :
590 :
591 :
592 :
593 :
594 :
597 :
598 :
599 :
600 :
601 :
602 :
603 :
604 :
605 :
606 :
607 :
608 :
609 :
610 :
611 :
612 :
613 :
614 :
615 :
616 :
617 :
618 :
619 :
620 :
621 :
622 :
623 :
624 :
625 :
626 :
627 :
628 :
629 :
630 :
631 :
632 :
633 :
634 :
635 :
636 :
637 :
638 :
639 :
640 :
641 :
642 :
643 :
644 :
645 :
646 :
647 :
648 :
649 :
650 :
651 :
652 :
653 :
654 :
655 :
656 :
657 :
658 :
659 :
660 :
661 :
662 :
663 :
664 :
665 :
666 :
667 :
668 :
669 :
670 :
671 :
672 :
673 :
674 :
675 :
676 :
677 :
678 :
679 :
680 :
681 :
682 :
683 :
684 :
685 :
686 :
687 :
688 :
689 :
690 :
691 :
692 :
693 :
694 :
695 :
696 :
697 :
698 :
699 :
700 :
701 :
702 :
703 :
704 :
705 :
706 :
707 :
708 :
709 :
710 :
711 :
712 :
713 :
714 :
715 :
716 :
717 :
718 :
719 :
720 :
721 :
722 :
723 :
724 :
725 :
726 :
727 :
728 :
729 :
730 :
731 :
732 :
733 :
734 :
735 :
736 :
737 :
738 :
739 :
740 :
741 :
742 :
743 :
744 :
745 :
746 :
747 :
750 :
751 :
752 :
753 :
754 :
755 :
756 :
757 :
762 :
764 :
765 :
766 :
767 :
769 :
770 :
771 :
772 :
773 :
774 :
776 :
777 :
778 :
779 :
780 :
781 :
782 :
783 :
784 :
785 :
786 :
787 :
788 :
789 :
790 :
791 :
792 :
793 :
794 :
795 :
796 :
797 :
798 :
799 :
800 :
801 :
802 :
803 :
804 :
805 :
806 :
807 :
808 :
809 :
810 :
811 :
812 :
813 :
814 :
815 :
816:00:00 thamer 10998
819:00:00
821:00:00
822:00:00
823:00:00
824:00:00
825:00:00
826:00:00
827:00:00
828:00:00
829:00:00
830:00:00
831:00:00
834:00:00
835:00:00
836:00:00
837:00:00
838:00:00
839:00:00
840:00:00
841:00:00 thamer 10742
842:00:00
843:00:00
850:00:00
851:00:00
852 :
855 :
856 :
857 :
858 :
859 :
862 :
866 :
867 :
868 :
869 :
870 :
871 :
872 :
873 :
874 :
875 :
876 :
877 :
878 :
879 :
880 :
881 :
882 :
883 :
884 :
887 :
888 :
889 :
890 :
891 :
892 :
893 :
894 :
895 :
905 :
906 :
907 : thamer 10742
912 :
915 :
916 :
917 :
918 :
919 :
920 :
921 :
922 :
923 :
924 :
925 :
926 :
927 :
928 :
929 :
930 :
931 :
932 :
933 :
934 :
935 :
936 :
937 :
938 :
939 :
940 :
941 :
942 :
943 :
944 :
945 :
946 :
947 :
948 :
949 :
950 :
951 :
952 :
953 :
954 :
955 :
956 :
957 :
958 :
959 :
960 :
961 :
962 :
963 :
964 :
965 :
966 :
967 :
968 :
969 :
970 :
971 : thamer 10998
972 :
973 :
974 :
975 :
976 :
977 :
978 :
979 :
980 :
981 :
982 :
983 :
984 :
985 :
986 :
987 :
988 :
989 :
990 :
991 :
992 :
993 :
994 :
995 :
996 :
997 :
998 :
999 :
1000 :
1001 :
1002 :
1003 :
1004 :
1005 :
1006 :
1007 :
1008 :
1009 :
1010 :
1011 :
1012 :
1013 :
1014 :
/************************************************************************
* $Id$
*
* ------------
* Description:
* ------------
* Most of the astronomical values and formulas used in this file are based
* upon a subset of the VSOP87 planetary theory developed by Jean Meeus. Page
* and formula numbers in-line below are references to his book: Astronomical
* -----------------
* -----------------
* $Date$
* $Author$
* $Revision$
* $Source$
*
* (www.arabeyes.org - under LGPL license - see COPYING file)
************************************************************************/
#include "astro.h"
typedef struct
{
double dec;
double ra;
double sidtime;
double dra;
double rsum;
} AstroDay ;
SUNSET };
static void computeAstroDay(double JD, AstroDay* astroday);
static void computeTopAstro(const Location* loc, const Astro* astro, Astro* tastro);
static double getRiseSet (const Location* loc, const Astro* astro, int type);
double M, sidG;
double A, H;
M = limitAngle1(M);
ra2 += 360;
if (tastro->ra[0] > 350 && tastro->ra[1] < 10)
ra0 = 0;
A = tastro->ra[1] +
/* p. 101 */
rDec = DEG_TO_RAD(tastro->dec[1]);
rLat = DEG_TO_RAD(loc->degreeLat);
ra0=tastro->ra[0];
ra2=tastro->ra[2];
if (type == SUNRISE)
M = M - (lhour/360.0);
if (type == SUNSET)
M = M + (lhour/360.0);
M = limitAngle1(M);
ra0 = tastro->ra[0];
ra2 = tastro->ra[2];
if (tastro->ra[1] > 350 && tastro->ra[2] < 10)
ra2 += 360;
(ra2 - tastro->ra[1] ) +
(( ra2 - tastro->ra[1] ) -
((tastro->dec[2] - tastro->dec[1]) -
rB = DEG_TO_RAD(B);
tH = DEG_TO_RAD(H) - tastro->dra[1];
+ cos(rLat) * cos(rB)
* cos(tH) ));
/* (p. 103) */
{8, 7, 7, 7, 7},
{7, 7, 8, 8, 9},
{9, 9, 9, 9, 10},
{10, 10, 10, 10, 10},
65.7768, /* 2009 */
double tempdt;
/* pp. 78-80 */
else if ((year > 1998 && year < 2100) || year < 1620)
{
/* FIXIT: The "2017" found below this comment should be changed to
i = year-1999;
return DT2[i];
}
months not yet supported). Extrapolated (and wrong) values are still
jdY=date->year;
jdM=date->month;
if (date->month <= 2) {
jdY--;
jdM+=12;
}
if (date->year < 1)
jdY++;
JD = JD + (computeDeltaT(date->year) / 86400.0);
return JD;
{175347046, 0, 0},
{628331966747.0, 0, 0},
{52919, 0, 0},
{1, 3.14, 0}
};
{32, 4, 1577.34}
};
{100013989, 0, 0},
};
{-158, 0, 0, 0},
{63, 0, 0, 0},
{48, 0, 0, 0},
{29, 0, 0, 0},
{26, 0, 0, 0},
{-22, 0, 0, 0},
{-15, 0, 9, 0},
{-13, 0, 7, 0},
{-12, 0, 6, 0},
{11, 0, 0, 0},
{-10, 0, 5, 0},
{-8, 0, 3, 0},
{-7, 0, 0, 0},
{-7, 0, 3, 0},
{-7, 0, 3, 0},
{6, 0, 0, 0},
{-6, 0, 3, 0},
{-6, 0, 3, 0},
{5, 0, 0, 0},
{-5, 0, 3, 0},
{-5, 0, 3, 0},
{-5, 0, 3, 0},
{4, 0, 0, 0},
{4, 0, 0, 0},
{4, 0, 0, 0},
{-4, 0, 0, 0},
{-4, 0, 0, 0},
{-4, 0, 0, 0},
{3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0},
{-3, 0, 0, 0}
};
{0, 0, 0, 0, 1},
{-2, 0, 0, 2, 2},
{0, 0, 0, 2, 2},
{0, 0, 0, 0, 2},
{0, 1, 0, 0, 0},
{0, 0, 1, 0, 0},
{-2, 1, 0, 2, 2},
{0, 0, 0, 2, 1},
{0, 0, 1, 2, 2},
{-2, 0, 1, 0, 0},
{-2, 0, 0, 2, 1},
{2, 0, 0, 0, 0},
{0, 0, 1, 0, 1},
{-2, 0, 2, 0, 0},
{2, 0, 0, 2, 2},
{0, 0, 2, 2, 2},
{0, 0, 2, 0, 0},
{-2, 0, 1, 2, 2},
{0, 0, 0, 2, 0},
{-2, 0, 0, 2, 0},
{0, 2, 0, 0, 0},
{-2, 2, 0, 2, 2},
{0, 1, 0, 0, 1},
{-2, 0, 1, 0, 1},
{2, 0, 1, 2, 2},
{0, 1, 0, 2, 2},
{-2, 1, 1, 0, 0},
{2, 0, 0, 2, 1},
{2, 0, 1, 0, 0},
{-2, 0, 2, 2, 2},
{-2, 0, 1, 2, 1},
{2, 0, 0, 0, 1},
{-2, 0, 0, 0, 1},
{0, 0, 2, 2, 1},
{-2, 0, 2, 0, 1},
{-2, 1, 0, 2, 1},
{-1, 0, 1, 0, 0},
{-2, 1, 0, 0, 0},
{1, 0, 0, 0, 0},
{0, 0, 1, 2, 0},
{0, 1, 1, 0, 0},
{0, 0, 3, 2, 2},
{2, -1, 0, 2, 2}
};
void getAstroValuesByDay(double julianDay, const Location* loc, Astro* astro,
Astro* topAstro)
{
AstroDay ad;
if (astro->jd == julianDay-1)
{
astro->ra[0] = astro->ra[1];
astro->ra[1] = astro->ra[2];
astro->dec[0] = astro->dec[1];
astro->dec[1] = astro->dec[2];
astro->sid[0] = astro->sid[1];
astro->sid[1] = astro->sid[2];
astro->dra[0] = astro->dra[1];
astro->dra[1] = astro->dra[2];
astro->rsum[0] = astro->rsum[1];
astro->rsum[1] = astro->rsum[2];
computeAstroDay(julianDay+1, &ad);
astro->ra[2] = ad.ra;
astro->dec[2] = ad.dec;
astro->sid[2] = ad.sidtime;
astro->dra[2] = ad.dra;
astro->rsum[2] = ad.rsum;
}
astro->ra[1] = astro->ra[0];
astro->dec[2] = astro->dec[1];
astro->dec[1] = astro->dec[0];
astro->sid[2] = astro->sid[1];
astro->sid[1] = astro->sid[0];
astro->dra[2] = astro->dra[1];
astro->dra[1] = astro->dra[0];
astro->rsum[2] = astro->rsum[1];
astro->rsum[1] = astro->rsum[0];
computeAstroDay(julianDay-1, &ad);
astro->ra[0] = ad.ra;
astro->dec[0] = ad.dec;
astro->sid[0] = ad.sidtime;
astro->dra[0] = ad.dra;
astro->rsum[0] = ad.rsum;
computeAstroDay(julianDay-1, &ad);
astro->ra[0] = ad.ra;
astro->dec[0] = ad.dec;
astro->sid[0] = ad.sidtime;
astro->dra[0] = ad.dra;
astro->rsum[0] = ad.rsum;
computeAstroDay(julianDay, &ad);
astro->ra[1] = ad.ra;
astro->dec[1] = ad.dec;
astro->sid[1] = ad.sidtime;
astro->dra[1] = ad.dra;
astro->rsum[1] = ad.rsum;
computeAstroDay(julianDay+1, &ad);
astro->ra[2] = ad.ra;
astro->dec[2] = ad.dec;
astro->sid[2] = ad.sidtime;
astro->dra[2] = ad.dra;
astro->rsum[2] = ad.rsum;
astro->jd = julianDay;
computeTopAstro(loc, astro, topAstro);
int i =0;
double tL, L;
double tB, B;
double D, M, M1, F, O;
double JM = JC/10.0;
/* FIXIT: By default, the getJulianDay function returns JDE rather then JD,
* circumstances. */
L = limitAngle(RAD_TO_DEG(tL));
B = RAD_TO_DEG(tB);
G = limitAngle((L + 180));
Gg = -B;
rGg = DEG_TO_RAD(Gg);
PNsum += D * COEFF[i][0];
PNsum += M * COEFF[i][1];
PNsum += M1 * COEFF[i][2];
PNsum += F * COEFF[i][3];
PNsum += O * COEFF[i][4];
PNsum=0;
}
deltaPsi = psi/36000000.0;
/* Nutation in obliquity */
deltaEps = epsilon/36000000.0;
/* The obliquity of the ecliptic (p. 147, 22.3) */
U = JM/10.0;
E = E0/3600.0 + deltaEps;
rE = DEG_TO_RAD(E);
lambda = G + deltaPsi + (-20.4898/(3600.0 * R));
rLambda = DEG_TO_RAD(lambda);
RA = limitAngle(RAD_TO_DEG(atan2(RAn,RAd)));
sin(rLambda));
astroday->ra = RA;
astroday->dec = DEC;
astroday->sidtime = V;
astroday->dra = 0;
astroday->rsum = R;
rLat = DEG_TO_RAD(loc->degreeLat);
rlHour = DEG_TO_RAD(lHour);
cos(rlHour)));
topAstro->ra[i] = tRA;
topAstro->dec[i] = tDEC;
topAstro->sid[i] = astro->sid[i];
topAstro->dra[i] = tRA0;
topAstro->rsum[i] = astro->rsum[i];
L /= 360.0;
F = L - floor(L);
if (F > 0)
return 360 * F;
else if (F < 0)
else return L;
}
L /= 180.0;
F = L - floor(L);
if (F > 0)
return 180 * F;
else if (F < 0)
else return L;
}
F = L - floor(L);
if (F < 0)
return F += 1;
return F;
}
L /= 360.0;
F = (L - floor(L)) * 360.0;
if (F < -180)
F += 360;
double tempJD;
double F, Z, A, B, a, D, E;
tempJD = jd + 0.5;
/* Add an extra 0.5 to compensate for day starts if different than 0h UT at
* local time. */
tempJD += 0.5;
}
Z = (int)tempJD;
F = tempJD - floor(tempJD);
if (Z < 2299161)
A = Z;
else
{
a = (int)((Z-1867216.25)/36524.25);
A = Z + 1 + a - (int)(a/4.0);
}
B = A + 1524;
C = (int)((B - 122.1)/365.25);
D = (int)(365.25 * C);
E = (int)((B - D)/30.6001);
if (E < 14)
month = E - 1;
else if ( E == 14 || E == 15 )
month = E - 13;
if (month > 2)
return C - 4716;