home *** CD-ROM | disk | FTP | other *** search
- /* Planetensystem.rexx
- *
- * Autor: Thies Wellpott
- * Version: 1.1 (2.7.94)
- *
- * Erstellt ein Planetensystem mit elliptischen Umlaufbahnen. Einzugeben
- * ist der Name und die Masse des Sterns, sowie für jeden Planeten der Name,
- * die Masse, die große Halbachse der Ellipse, die numerische Exzentrizität
- * und die mittlere Umlaufgeschwindigkeit
- * Die Einheiten sind vorgegeben
- *
- * benötigt rexxmathlib.library
- */
-
- G = 6.67259e-11 /* Gravitationskonstante */
- PI = 3.1415927
-
- Call Addlib("rexxmathlib.library",0,-30,0)
-
- IF ~Show("P", "GRAVISIMU.1") THEN
- DO
- Say "GraviSimu ist nicht gestartet!"
- Exit
- END
-
- Address "GRAVISIMU.1"
- Options Results
-
- 'GetNumObjects'
- IF Result > 0 THEN
- Say "Achtung! Die existierenden Objekte können stören!"
-
-
- Options Prompt ">> "
-
- Say "Name des Sterns"
- Parse Pull name
- m_einh = "mS"
- Say "Masse des Sterns in" m_einh
- Parse Pull m
- 'GetUnitKG' m_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Masseneinheit!"
- Exit
- END
-
-
- 'NewObject "'name'"' m m_einh '0 0 m 0 0 m/s 1 1 0 1'
- IF RC ~= 0 THEN
- DO
- Say '*** Konnte das Objekt "'name'" nicht anfügen!'
- Exit
- END /* IF */
-
- min_T = 1e35
- max_a = 0
-
- DO i=1 UNTIL name = ""
- Say
- Say i". Planetenname (eine leere Eingabe beendet das Skript)"
- Parse Pull name
- IF name ~= "" THEN
- DO
- m_einh = "kg"
- Say " Planetenmasse in" m_einh
- Parse Pull m
- 'GetUnitKG' m_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Masseneinheit!"
- Exit
- END
- m_kg = m * Result
-
- Say "Daten der elliptischen Umlaufbahn"
- a_einh = "AE"
- Say " große Halbachse in" a_einh
- Parse Pull a
- 'GetUnitM' a_einh
- IF RC ~= 0 THEN
- DO
- Say "*** Ungültige Streckeneinheit!"
- Exit
- END
- a_m = a * Result
-
- Say " numerische Exzentrizität (zwischen 0.0 und 1.0)"
- Parse Pull epsilon
- Say " mittlere Umlaufgeschwindigkeit in km/s"
- Parse Pull vm
- vm_ms = vm*1000
-
- b = a * Sqrt(1 - epsilon*epsilon)
- x = epsilon*a
- y = -b
- vx = vm
- vy = 0
-
- T = 2*PI * a_m / vm_ms /* ungefähre Umlaufzeit in s */
- IF T < min_T THEN
- min_T = T
- IF a_m > max_a THEN
- max_a = a_m
-
- 'NewObject "'name'"' m m_einh x y a_einh vx vy 'km/s 1 0 1 1'
- IF RC ~= 0 THEN
- Say "*** Konnte Planeten nicht anfügen!"
- END /* IF */
- END /* DO UNTIL */
-
- IF max_a = 0 THEN
- Say "*** Kein Planet eingegeben!"
- ELSE DO
- 'GetWindowSize'
- Parse Var Result sx sy
- 'GetUnitM AE'
- 'SetScale' 2*max_a/Result/(Min(sx,sy)/2.25) 'AE'
- 'GetUnitS d'
- 'SetTime' min_T/Result/200 'd'
- 'SetParameter T=1 N=1'
- 'SetOptions M=0'
- END
-
- Exit
-
-