Changeset 7432 for trunk/MagicSoft/Mars/mastro
- Timestamp:
- 11/28/05 11:15:09 (19 years ago)
- Location:
- trunk/MagicSoft/Mars/mastro
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mastro/MAstro.cc
r7227 r7432 623 623 return TMath::ACos(d)*TMath::RadToDeg(); 624 624 } 625 626 // -------------------------------------------------------------------------- 627 // 628 // Returned is the offset (number of days) which must be added to 629 // March 1st of the given year, eg: 630 // 631 // Int_t offset = GetDayOfEaster(2004); 632 // 633 // MTime t; 634 // t.Set(year, 3, 1); 635 // t.SetMjd(t.GetMjd()+offset); 636 // 637 // cout << t << endl; 638 // 639 // If the date coudn't be calculated -1 is returned. 640 // 641 // The minimum value returned is 21 corresponding to March 22. 642 // The maximum value returned is 55 corresponding to April 25. 643 // 644 // -------------------------------------------------------------------------- 645 // 646 // Gauss'sche Formel zur Berechnung des Osterdatums 647 // Wann wird Ostern gefeiert? Wie erfährt man das Osterdatum für ein 648 // bestimmtes Jahr, ohne in einen Kalender zu schauen? 649 // 650 // Ostern ist ein "bewegliches" Fest. Es wird am ersten Sonntag nach dem 651 // ersten Frühlingsvollmond gefeiert. Damit ist der 22. März der früheste 652 // Termin, der 25. April der letzte, auf den Ostern fallen kann. Von 653 // diesem Termin hängen auch die Feste Christi Himmelfahrt, das 40 Tage 654 // nach Ostern, und Pfingsten, das 50 Tage nach Ostern gefeiert wird, ab. 655 // 656 // Von Carl Friedrich Gauß (Mathematiker, Astronom und Physiker; 657 // 1777-1855) stammt ein Algorithmus, der es erlaubt ohne Kenntnis des 658 // Mondkalenders die Daten der Osterfeste für die Jahre 1700 bis 2199 zu 659 // bestimmen. 660 // 661 // Gib eine Jahreszahl zwischen 1700 und 2199 ein: 662 // 663 // Und so funktioniert der Algorithmus: 664 // 665 // Es sei: 666 // 667 // J die Jahreszahl 668 // a der Divisionsrest von J/19 669 // b der Divisionsrest von J/4 670 // c der Divisionsrest von J/7 671 // d der Divisionsrest von (19*a + M)/30 672 // e der Divisionsrest von (2*b + 4*c + 6*d + N)/7 673 // 674 // wobei M und N folgende Werte annehmen: 675 // 676 // für die Jahre M N 677 // 1700-1799 23 3 678 // 1800-1899 23 4 679 // 1900-2099 24 5 680 // 2100-2199 24 6 681 // 682 // Dann fällt Ostern auf den 683 // (22 + d + e)ten März 684 // 685 // oder den 686 // (d + e - 9)ten April 687 // 688 // Beachte: 689 // Anstelle des 26. Aprils ist immer der 19. April zu setzen, 690 // anstelle des 25. Aprils immer dann der 18. April, wenn d=28 und a>10. 691 // 692 // Literatur: 693 // Schüler-Rechenduden 694 // Bibliographisches Institut 695 // Mannheim, 1966 696 // 697 // -------------------------------------------------------------------------- 698 // 699 // Der Ostersonntag ist ein sog. unregelmäßiger Feiertag. Alle anderen 700 // unregelmäßigen Feiertage eines Jahres leiten sich von diesem Tag ab: 701 // 702 // * Aschermittwoch ist 46 Tage vor Ostern. 703 // * Pfingsten ist 49 Tage nach Ostern. 704 // * Christi Himmelfahrt ist 10 Tage vor Pfingsten. 705 // * Fronleichnam ist 11 Tage nach Pfingsten. 706 // 707 // Man muß also nur den Ostersonntag ermitteln, um alle anderen 708 // unregelmäßigen Feiertage zu berechnen. Doch wie geht das? 709 // 710 // Dazu etwas Geschichte: 711 // 712 // Das 1. Kirchenkonzil im Jahre 325 hat festgelegt: 713 // 714 // * Ostern ist stets am ersten Sonntag nach dem ersten Vollmond des 715 // Frühlings. 716 // * Stichtag ist der 21. März, die "Frühlings-Tagundnachtgleiche". 717 // 718 // Am 15.10.1582 wurde von Papst Gregor XIII. der bis dahin gültige 719 // Julianische Kalender reformiert. Der noch heute gültige Gregorianische 720 // Kalender legt dabei folgendes fest: 721 // 722 // Ein Jahr hat 365 Tage und ein Schaltjahr wird eingefügt, wenn das Jahr 723 // durch 4 oder durch 400, aber nicht durch 100 teilbar ist. Hieraus 724 // ergeben sich die zwei notwendigen Konstanten, um den Ostersonntag zu 725 // berechnen: 726 // 727 // 1. Die Jahreslänge von und bis zum Zeitpunkt der 728 // Frühlings-Tagundnachtgleiche: 365,2422 mittlere Sonnentage 729 // 2. Ein Mondmonat: 29,5306 mittlere Sonnentage 730 // 731 // Mit der "Osterformel", von Carl Friedrich Gauß (1777-1855) im Jahre 1800 732 // entwickelt, läßt sich der Ostersonntag für jedes Jahr von 1583 bis 8202 733 // berechnen. 734 // 735 // Der früheste mögliche Ostertermin ist der 22. März. (Wenn der Vollmond 736 // auf den 21. März fällt und der 22. März ein Sonntag ist.) 737 // 738 // Der späteste mögliche Ostertermin ist der 25. April. (Wenn der Vollmond 739 // auf den 21. März fällt und der 21. März ein Sonntag ist.) 740 // 741 Int_t MAstro::GetEasterOffset(UShort_t year) 742 { 743 if (year<1700 || year>2199) 744 { 745 cout << "MAstro::GetDayOfEaster - Year " << year << " not between 1700 and 2199" << endl; 746 return -1; 747 } 748 749 const Int_t M = (year+2900)/200; 750 751 Int_t N=0; 752 switch (year/100) 753 { 754 case 17: N=3; break; 755 case 18: N=4; break; 756 case 19: 757 case 20: N=5; break; 758 case 21: N=6; break; 759 } 760 761 const Int_t a = year%19; 762 const Int_t b = year%4; 763 const Int_t c = year%7; 764 const Int_t d = (19*a + M)%30; 765 const Int_t e = (2*b + 4*c + 6*d + N)%7; 766 767 if (e==6 && d==28 && a>10) 768 return 48; 769 770 if (d+e==35) 771 return 49; 772 773 return d + e + 21; 774 } -
trunk/MagicSoft/Mars/mastro/MAstro.h
r7202 r7432 10 10 11 11 class TVector3; 12 class MTime; 12 13 13 14 class MAstro … … 76 77 static Double_t GetDevAbs(Double_t nomzd, Double_t devzd, Double_t devaz); 77 78 79 static Int_t GetEasterOffset(UShort_t year); 80 78 81 ClassDef(MAstro, 0) 79 82 };
Note:
See TracChangeset
for help on using the changeset viewer.