home *** CD-ROM | disk | FTP | other *** search
- /* stabile_Umkreisung.rexx
- *
- * Autor: Thies Wellpott
- * Version: 2.0 (1.7.94)
- *
- * Berechnet für GraviSimu für einen definierbaren Zentralkörper und
- * einen durch verschiedene, wählbare Parameter definierbaren
- * Satelliten eine nach physikalischen Gesetzen stabile Kreisbahn
- *
- * benötigt rexxmathlib.library
- */
-
- G = 6.67259e-11 /* Gravitationskonstante */
- PI = 3.1415927
-
- Call Addlib("rexxmathlib.library",0,-30,0)
-
- IF ~Show("Ports", "GRAVISIMU.1") THEN
- DO
- Say "GraviSimu ist nicht gestartet!"
- Exit
- END
-
- Address "GRAVISIMU.1"
- Options Results
-
- 'GetNumObjects'
- IF Result ~= 0 THEN
- Say "*** Achtung! Es sind noch Objekte vorhanden; diese können stören!"
-
-
- Options Prompt ">> "
-
- Say "Geben Sie den Namen des zentralen Objektes ein"
- Parse Pull obj1name
- Say "Geben Sie die Masse des zentralen Objektes ein (Kommazahl"
- Say "Leerzeichen Masseneinheitsabkürzung)"
- Parse Pull obj1m obj1m_einh
- 'GetUnitKG' obj1m_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Masseneinheit!"
- Exit
- END
- obj1m_kg = obj1m * Result
-
- 'NewObject "'obj1name'"' obj1m obj1m_einh '0 0 m 0 0 m/s 1 1 0 1'
- IF RC ~= 0 THEN
- DO
- Say '*** Konnte Objekt "'obj1name'" nicht anfügen!'
- Exit
- END
-
- Say
- Say "Geben Sie den Namen des umkreisenden Objektes ein"
- Parse Pull obj2name
- Say "Geben Sie die Masse des umkreisenden Objektes ein (Kommazahl"
- Say "Leerzeichen Masseneinheitsabkürzung) - muß wesentlich kleiner"
- Say "als die Masse des zentralen Objektes sein"
- Parse Pull obj2m obj2m_einh
- 'GetUnitKG' obj2m_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Masseneinheit!"
- Exit
- END
- obj2m_kg = obj2m * Result
-
- Say
- Say "Welchen Wert wollen Sie für das umkreisende Objekt eingeben?"
- Say " 1: Radius 2: Umlaufdauer 3: Winkelgeschwindigkeit"
- Say " 4: Geschwindigkeit"
- Parse Pull x
-
- SELECT
- WHEN x = "1" THEN
- DO
- Say "Geben Sie den Umkreisungsradius ein (Kommazahl Leerzeichen"
- Say "Streckeneinheitsabkürzung)"
- Parse Pull r r_einh
- 'GetUnitM' r_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Streckeneinheit!"
- Exit
- END
- r_m = r * Result
-
- v = Sqrt(G * obj1m_kg / r_m)
- v_einh = "m/s"
- v_ms = v
- END /* 1 */
-
-
- WHEN x = "2" THEN
- DO
- Say "Geben Sie die Umlaufdauer ein (Kommazahl Leerzeichen"
- Say "Zeiteinheitsabkürzung)"
- Parse Pull T T_einh
- 'GetUnitS' T_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Zeiteinheit!"
- Exit
- END
- T_s = T * Result
-
- r = Pow(G * obj1m_kg * T_s*T_s / (4*PI*PI), 1/3)
- r_einh = "m"
- r_m = r
- v = 2*PI * r / T_s
- v_einh = "m/s"
- v_ms = v
- END /* 2 */
-
-
- WHEN x = "3" THEN
- DO
- Say "Geben Sie die Winkelgeschwindigkeit in Grad pro Sekunde ein"
- Parse Pull w
-
- w = w * PI/180 /* Grad in Radiant */
- r = Pow(G * obj1m_kg / (w*w), 1/3)
- r_einh = "m"
- r_m = r
- v = w * r
- v_einh = "m/s"
- v_ms = v
- END /* 3 */
-
-
- WHEN x = "4" THEN
- DO
- Say "Geben Sie die Geschwindigkeit ein (Kommazahl Leerzeichen"
- Say "Geschwindigkeitseinheitsabkürzung)"
- Parse Pull v v_einh
- 'GetUnitMS' v_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Geschwindigkeitseinheit!"
- Exit
- END
- v_ms = v * Result
-
- r = G * obj1m_kg / (v_ms * v_ms)
- r_einh = "m"
- r_m = r
- END /* 4 */
-
-
- OTHERWISE
- Say
- Say "*** Ungültige Eingabe!"
- Exit
- END /* SELECT */
-
- Say
-
- 'NewObject "'obj2name'"' obj2m obj2m_einh r '0' r_einh '0' v v_einh '1 1 1 1'
- IF RC ~= 0 THEN
- DO
- Say '*** Konnte Objekt "'obj2name'" nicht anfügen!'
- Exit
- END
-
- 'GetWindowSize' /* Fenstergröße besorgen, diese */
- Parse Var Result sx sy /* soll ausgenutzt werden */
-
- 'SetScale' r/(Min(sx,sy)/2.25) r_einh
- 'SetTime' 2*PI * r_m/v_ms/1000 's' /* 1000 Pos. pro Umlauf */
-
- 'SetParameter T=1 N=1' /* ein paar Paramter einstellen */
- 'SetOptions CM=0 BP=1 M=0'
- 'SetView 0'
-
- Exit
-
-