Mondphasentermine

  • Hallo,

    mir war mal wieder etwas langweilig und da ich mich noch vor 20 Jahren etwas
    mit Astronomie auseinandergesetzt habe, mußte ich doch mal probieren

    eine Sache in Autoit umzusetzten. Nunja, hier das Ergebnis - wer's gebrauchen kann?

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.2.10.0
    Author: trallala

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    #NoTrayIcon
    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    $Form1 = GUICreate("Mondphasen", 520, 250, -1, -1,$WS_POPUPWINDOW,$WS_EX_TOOLWINDOW)
    GUISetBkColor(0x151843)
    $Label01 = GUICtrlCreateLabel("Mondphasen für das Jahr:", 8, 8, 140, 17)
    GUICtrlSetColor(-1, 0xC0C0FF)
    $ListView1 = GUICtrlCreateListView("Neumond |Erstes Viertel |Vollmond |Letztes Viertel ",10,30,500,210, $BS_FLAT)
    GUICtrlSetColor(-1, 0xC0C0FF)
    GUICtrlSetBkColor(-1, 0x151843)
    ;
    $wert = GUICtrlCreateInput("", 175, 8, 35, 17, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
    GUICtrlSetData($wert,@YEAR)
    GUICtrlSetLimit ($wert , 4)
    $runter = GUICtrlCreateButton("-", 145, 8, 25, 17, $BS_FLAT)
    $hoch = GUICtrlCreateButton("+", 215, 8, 25, 17, $BS_FLAT)
    $Start = GUICtrlCreateButton("Ok",250,8,25,17, $BS_FLAT)
    $Beenden = GUICtrlCreateButton("X",495,8,15,15, $BS_FLAT)
    GUISetState(@SW_SHOW)
    ;
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Beenden
    Exit
    Case $runter
    GUICtrlSetData($wert, GUICtrlRead($wert) - 1)
    Case $hoch
    GUICtrlSetData($wert, GUICtrlRead($wert) + 1)
    Case $Start
    $jahr = GUICtrlRead($wert)
    _Mondph($jahr)
    EndSwitch
    WEnd
    ;
    Func _Mondph(ByRef $jahr)
    DIM $dQ[4],$A[14],$Q[4]
    DIM $dQx[2]=[2451550.09766,29.530588861]
    Dim $Qx[16]=[0.00111,0.00057,0.00056,0.00042,0.00038,0.00034,0.00032,0.00028, _
    0.00027,0.00024,0.00017,0.00007,0.00005,0.00004,0.00003,0.00002]
    DIM $Ph[4]=[0.00,0.25,0.50,0.75],$PI=3.1415926531, $Color
    DIM $Par[4][2]=[[2.5534,29.1053567],[201.5643,385.81693528], _
    [160.7108,390.67050284],[124.7746,1.56375588]]
    DIM $Ax[14][2]=[[299.77,0.107408],[251.88,0.016321],[251.83,26.651886],[349.42,36.412478], _
    [84.66,18.206239],[141.74,53.303771],[207.14,2.453732],[154.84,7.30686],[34.52,27.261239], _
    [207.19,0.121824],[291.34,1.844379],[161.72,24.198154],[239.56,25.513099],[331.55,3.592518]]
    Global $Farbe1[2] = [0xDCDCDC, 0xC0C0FF]
    _GUICtrlListView_DeleteAllItems(ControlGetHandle("", "", $ListView1))
    ;Korrektur Dynamical Time (Td)
    $tx=($jahr-2000)/100
    If $jahr<948 Then
    $deltaTd=2177+497*$tx+44.1*$tx^2
    ElseIf $jahr<=1600 Or $jahr>2100 Then
    $deltaTd=102+102*$tx+25.3*$tx^2
    ElseIf $jahr<2000 Then
    $deltaTd=-183.5343-0.1472927*$jahr-0.00003856419*$jahr^2+0.00000008706996*$jahr^3
    ElseIf $jahr>=2000 Then
    $deltaTd=102+102*$tx+25.3*$tx^2
    $deltaTd=$deltaTd+0.37*($jahr-2100)
    EndIf
    $deltaTd=$deltaTd/86400
    ;jeder Monat wird einmal durchlaufen
    For $x1=0 to 12
    $Date1=_DateToJd(0,$x1,$jahr,0,0,0)
    $Date2=_DateToJd(0,0,$jahr,0,0,0)
    $DateDiff=$Date1-$Date2
    $k =Int(($jahr-2000+($DateDiff)/365.25)*12.3685)
    $T =$k/1236.85
    $dQ1=0.00015437*$T^2-0.00000015*$T^3+0.00000000073*$T^4
    ;--> 4 Phasen
    For $x2=0 to 3
    $dQ[$x2]=$dQx[0]+$dQx[1]*($k+$Ph[$x2])+$dQ1
    $T=($Date1-2451545)/36525
    $E=1+$T*(-0.002516-0.0000074*$T)
    ;---> Planeten-Agumente (Störungen berücksichtigen)
    ;-> Agumente: 1 von 14
    $A[0]=($Ax[0][0]+$Ax[0][1]*$k-0.009173*$T^2)*$PI/180
    ;-> Agumente: 2 bis 14
    For $x3=1 To 13
    $A[$x3]=($Ax[$x3][0]+$Ax[$x3][1]*$k)*$PI/180
    Next
    $M0_tmp=0.0000014*$T^2-0.00000011*$T^3
    $M1_tmp=0.0107582*$T^2+0.00001238*$T^3-0.000000058*$T^4
    $F_tmp=0.0016118*$T^2-0.00000227*$T^3+0.000000011*$T^4
    $O_tmp=0.0020672*$T^2+0.00000215*$T^3
    ;Mittlere Anomalie der Sonne
    $M=$Par[0][0]+$Par[0][1]*($k+0.25+(0.25*($x2-1)))-$M0_tmp
    _360Grad($M)
    $M=$M*$PI/180
    ;Mittlere Anomalie des Mondes
    $M1=$Par[1][0]+$Par[1][1]*($k+0.25+(0.25*($x2-1)))+$M1_tmp
    _360Grad($M1)
    $M1=$M1*$PI/180
    ;Agument der Breite des Mondes
    $F=$Par[2][0]+$Par[2][1]*($k+0.25+(0.25*($x2-1)))-$F_tmp
    _360Grad($F)
    $F=$F*$PI/180
    ;Länge des aufsteigenden Knoten der Mondbahn
    $Omega=$Par[3][0]-$Par[3][1]*($k+0.25+(0.25*($x2-1)))+$O_tmp
    _360Grad($Omega)
    $Omega=$Omega*$PI/180
    If $x2=0 Then
    ;Neumond
    $dQ[$x2]=$dQ[$x2]-0.4072*Sin($M1)+0.17241*$E*Sin($M)+0.01608*Sin(2*$M1) _
    +0.01039*(Sin(2*$F))+0.00739*$E*Sin(($M1-$M))-0.00514*$E*Sin($M1+$M) _
    +0.00208*$E^2*Sin(2*$M)-$Qx[0]*Sin($M1-2*$F)-$Qx[1]*Sin($M1+2*$F) _
    +$Qx[2]*$E*Sin(2*$M1+$M)-$Qx[3]*Sin(3*$M1)+$Qx[3]*$E*Sin($M+2*$F) _
    +$Qx[4]*$E*Sin($M-2*$F)-$Qx[9]*$E*Sin(2*$M1-$M)-$Qx[10]*Sin($Omega) _
    -$Qx[11]*Sin($M1+2*$M)+$Qx[13]*Sin(2*$M1-2*$F)+$Qx[13]*Sin(3*$M) _
    +$Qx[14]*Sin($M1+$M-2*$F)+$Qx[14]*Sin(2*$M1+2*$F)-$Qx[14]*Sin($M1+$M+2*$F) _
    +$Qx[14]*Sin($M1-$M+2*$F)-$Qx[15]*Sin($M1-$M-2*$F)-$Qx[15]*Sin(3*$M1+$M) _
    +$Qx[15]*Sin(4*$M1)
    EndIf
    If $x2=1 or $x2=3 Then
    ;erstes und letztes Viertel
    $dQ[$x2]=$dQ[$x2]-0.62801*Sin($M1)+0.17172*$E*Sin($M)-0.01183*$E*Sin($M1+$M) _
    +0.00862*Sin(2*$M1)+0.00804*Sin(2*$F)+0.00454*$E*Sin($M1-$M)+0.00204*$E^2*Sin(2*$M) _
    -0.0018*Sin($M1-2*$F)-$Qx[11]*Sin($M1+2*$F)-$Qx[13]*Sin(3*$M1)-$Qx[5]*$E*Sin(2*$M1-$M) _
    +$Qx[6]*$E*Sin($M+2*$F)+$Qx[6]*$E*Sin($M-2*$F)-$Qx[7]*$E^2*Sin($M1+2*$M) _
    +$Qx[8]*$E*Sin(2*$M1+$M)-$Qx[11]*Sin($Omega)-$Qx[12]*Sin($M1-$M-2*$F)+$Qx[13]*Sin(2*$M1+2*$F) _
    -$Qx[13]*Sin($M1+$M+2*$F)+$Qx[13]*Sin($M1-2*$M)+$Qx[14]*Sin($M1+$M-2*$F)+$Qx[14]*Sin(3*$M) _
    +$Qx[15]*Sin(2*$M1-2*$F)+$Qx[15]*Sin($M1-$M+2*$F)-$Qx[15]*Sin(3*$M1+$M)
    ;Korrektur für erstes und letztes Viertel
    $W=0.00306-0.00038*$E*Cos($M)+0.00026*Cos($M1)-$Qx[15]*Cos($M1-$M) _
    +$Qx[15]*Cos($M1+$M)+$Qx[15]*Cos(2*$F)
    If $x2=1 Then
    ;erstes Viertel
    $dQ[$x2]=$dQ[$x2]+$W
    ElseIf $x2=3 Then
    ;letztes Viertel
    $dQ[$x2]=$dQ[$x2]-$W
    EndIf
    EndIf
    If $x2=2 Then
    ;Vollmond
    $dQ[$x2]=$dQ[$x2]-0.40614*Sin($M1)+0.17302*$E*Sin($M)+0.01614*Sin(2*$M1) _
    +0.01043*Sin(2*$F)+0.00734*$E*Sin($M1-$M)-0.00515*$E*Sin($M1+$M)+0.00209*$E^2*Sin(2*$M) _
    -$Qx[0]*Sin($M1-2*$F)-$Qx[1]*Sin($M1+2*$F)+$Qx[2]*$E*Sin(2*$M1+$M)-$Qx[3]*Sin(3*$M1) _
    +$Qx[3]*$E*Sin($M+2*$F)+$Qx[4]*$E*Sin($M-2*$F)-$Qx[9]*$E*Sin(2*$M1-$M)-$Qx[10]*Sin($Omega) _
    -$Qx[11]*Sin($M1+2*$M)+$Qx[13]*Sin(2*$M1-2*$F)+$Qx[13]*Sin(3*$M) _
    +$Qx[14]*Sin($M1+$M-2*$F)+$Qx[14]*Sin(2*$M1+2*$F)-$Qx[14]*Sin($M1+$M+2*$F) _
    +$Qx[14]*Sin($M1-$M+2*$F)-$Qx[15]*Sin($M1-$M-2*$F)-$Qx[15]*Sin(3*$M1+$M) _
    +$Qx[15]*Sin(4*$M1)
    EndIf
    ;Korrektur für alle Phasen
    ;(Störungen der Planeten berücksichtigen)
    $dQ[$x2]=$dQ[$x2]+0.000325*Sin($A[0])+0.000165*Sin($A[1])+0.000164*Sin($A[2])+0.000126*Sin($A[3]) _
    +0.00011*Sin($A[4])+0.000062*Sin($A[5])+0.00006*Sin($A[6])+0.000056*Sin($A[7])+0.000047*Sin($A[8]) _
    +0.000042*Sin($A[9])+0.00004*Sin($A[10])+0.000037*Sin($A[11])+0.000035*Sin($A[12])+0.000023*Sin($A[13])
    ;Termine
    $Q[$x2]=_JdToDate($dQ[$x2]-$deltaTd)
    if StringMid($Q[$x2], 7, 4)<$jahr or StringMid($Q[$x2], 7, 4)>$jahr Then
    $Q[$x2]=""
    Continueloop
    EndIf
    Next
    ;Ausgabe
    $inhalt1 = $Q[0] & "|" & $Q[1] & "|" & $Q[2] & "|" & $Q[3]
    GUICtrlCreateListViewItem($inhalt1, $ListView1)
    GUICtrlSetColor(-1, $Farbe1[Mod($x1,2)])
    If $x1=0 and $inhalt1= "" & "|" & "" & "|" & "" & "|" & "" then
    _GUICtrlListView_DeleteAllItems(ControlGetHandle("", "", $ListView1))
    EndIf
    Next
    EndFunc
    ;
    Func _DateToJd($tag,$monat,$jahr,$stunde,$minute,$sekunde)
    $a=$jahr
    $b=$monat
    If $monat<= 2 Then
    $a=$jahr-1
    $b=$monat+12
    EndIf
    $c=Int($a/100)
    $d=Int($c/4)
    $e=2 - $c+$d
    $f=Int(1461*($a+4716)/4)
    $g=Int(153*($b+1)/5)
    $Jd0=$tag+$e+$f+$g-1524.5
    Return $Jd0+$stunde/24+$minute/1440+$sekunde/86400
    EndFunc
    ;
    Func _JdToDate($Jd1)
    $a=$Jd1+0.5
    $b=int($a)
    $c=$a-$b
    If $b<299161 Then
    $d=$b
    Else
    $d=int(($b-1867216.25)/36524.25)
    EndIf
    $e=$b+1+$d-int($d/4)
    $f=$e+1524
    $g=int(($f-122.1)/365.25)
    $h=int(365.25*$g)
    $i=int(($f-$h)/30.6001)
    $j=$f-$h-int(30.6001*$i)
    if $i<13.5 then
    $k=$i-1
    Else
    $k=$i-13
    EndIf
    if $k>2.5 Then
    $l=$g-4716
    Else
    $l=$g-4715
    EndIf
    $m=24*$c
    $n=($m-int($m))*60
    $o=($n-int($n))*60
    $k=StringFormat("%02d", $k)
    $j=StringFormat("%02d", $j)
    $m=StringFormat("%02d", $m)
    $n=StringFormat("%02d", $n)
    $o=StringFormat("%02d", $o)
    Return $j & "." & $k & "." & $l & " - " & $m & ":" & $n & ":" & $o
    EndFunc
    ;
    Func _360Grad($Grad)
    Return $Grad-360*int($Grad/360)
    EndFunc

    [/autoit]

    Edit: Ich habe noch ein paar Reparaturen vorgenommen (u.a. funktioniert es jetzt auch mit Autoit 3.2.10.0).

    MfG
    trallala

    11 Mal editiert, zuletzt von trallala (6. Januar 2008 um 16:19)

  • hrhr hatte schon den prerelease :P^^
    ich find richtig cool :) nur brauchen mhh naja vll irgendwann mal glaub aber her nicht ;)
    trotzdem cooles script :)
    muss ich noch sagen dass du weitermachen sollst??bist ja schließlich länger dabei als ich^^


    snoozy

  • OK hab jetzt mal versucht zu verstehen, was genau da alles wie berechnet wird......

    Ich glaub ohne jegliche Vorkenntnisse wird das nichts....

  • Zitat

    Original von GrungeRocker
    OK hab jetzt mal versucht zu verstehen, was genau da alles wie berechnet wird......

    Ich glaub ohne jegliche Vorkenntnisse wird das nichts....


    hihi ich checks auch nicht trotzdem siehts cool aus^^
    naja irgendwie verwendet er pi da sich die mondphasen wie nen kreis verhalten siehe wikipedia.de...naja egal trotzdem cool^^

    snoozy

  • Hi

    Omg, das is ja mal krass, ich check zwar das Skript nicht, aba es funzt^^

    schönes Prog!!!


    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • hab noch nen verbesserungsvorschlag^^
    von anfang an zeigt es ja die mondphasen von 1987 an...ich würde das mit @year ersetzten..
    zeile 19 wie folgt ändern:

    [autoit]

    GUICtrlSetData($jahr1,@YEAR)

    [/autoit]

    snoozer

  • Hallo,

    snoozer:
    ich habe deinem Wunsch entsprochen
    1) Aktuelles Jahr
    2) zusätzlcih noch ein +- Button zum wechseln der Jahreszahl
    (geänder in source-code - siehe oben^^

    @peethebe:
    ja, wenn es soweit ist, will ich mein bestes versuchen.

    MfG
    trallala

    Einmal editiert, zuletzt von trallala (4. Juni 2007 um 21:35)

  • Ich dacht mir am Anfang auch, dass es perfekt in Galenda passen würde ^^


    Hab es bei der ganzen Denkerei dann doch lieber gelassen...


    Aber dank des Tipps mit Pi fang ich an die Berechnungen langsam zu kapieren....


    Ich glaub ich druck mir das aus und guck es mir dann morgen in der Schule an, wenn ich mene Physikarbeit fertig hab XD

  • trallala hast es echt drauf^^ ich peil das script immer noch nicht finds trotzdem richtig coooooool :)
    LOL als galendaplugin wärs richtig geil^^ einfach nur als information im kalender reicht ja schon^^
    war zwar minimal bugfixing notwendig waren aber kleinigkeiten^^
    das wars vom snoozer :D

    snoozer

  • ich bin beeindruck...bei so vielen zahlen hätte ich augen krebs bekommen und von meinen fertigkeiten hätte das auch nich funktioniert -.-

    aber trotzdem grosses lob an dich

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer