home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / misc / sci / gravisimu / arexx / planetensystem.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1994-07-02  |  2.6 KB  |  127 lines

  1. /* Planetensystem.rexx
  2.  *
  3.  * Autor: Thies Wellpott
  4.  * Version: 1.1 (2.7.94)
  5.  *
  6.  * Erstellt ein Planetensystem mit elliptischen Umlaufbahnen. Einzugeben
  7.  * ist der Name und die Masse des Sterns, sowie für jeden Planeten der Name,
  8.  * die Masse, die große Halbachse der Ellipse, die numerische Exzentrizität
  9.  * und die mittlere Umlaufgeschwindigkeit
  10.  * Die Einheiten sind vorgegeben
  11.  *
  12.  * benötigt rexxmathlib.library
  13.  */
  14.  
  15. G = 6.67259e-11         /* Gravitationskonstante */
  16. PI = 3.1415927
  17.  
  18. Call Addlib("rexxmathlib.library",0,-30,0)
  19.  
  20. IF ~Show("P", "GRAVISIMU.1") THEN
  21. DO
  22.    Say "GraviSimu ist nicht gestartet!"
  23.    Exit
  24. END
  25.  
  26. Address "GRAVISIMU.1"
  27. Options Results
  28.  
  29. 'GetNumObjects'
  30. IF Result > 0 THEN
  31.    Say "Achtung! Die existierenden Objekte können stören!"
  32.  
  33.  
  34. Options Prompt ">> "
  35.  
  36. Say "Name des Sterns"
  37. Parse Pull name
  38. m_einh = "mS"
  39. Say "Masse des Sterns in" m_einh
  40. Parse Pull m
  41. 'GetUnitKG' m_einh
  42. IF RC ~= 0 THEN
  43. DO
  44.    Say "*** Ungültige Masseneinheit!"
  45.    Exit
  46. END
  47.  
  48.  
  49. 'NewObject "'name'"' m m_einh '0 0 m 0 0 m/s 1 1 0 1'
  50. IF RC ~= 0 THEN
  51. DO
  52.    Say '*** Konnte das Objekt "'name'" nicht anfügen!'
  53.    Exit
  54. END /* IF */
  55.  
  56. min_T = 1e35
  57. max_a = 0
  58.  
  59. DO i=1 UNTIL name = ""
  60.    Say
  61.    Say i". Planetenname (eine leere Eingabe beendet das Skript)"
  62.    Parse Pull name
  63.    IF name ~= "" THEN
  64.    DO
  65.       m_einh = "kg"
  66.       Say "   Planetenmasse in" m_einh
  67.       Parse Pull m
  68.       'GetUnitKG' m_einh
  69.       IF RC ~= 0 THEN
  70.       DO
  71.          Say "*** Ungültige Masseneinheit!"
  72.          Exit
  73.       END
  74.       m_kg = m * Result
  75.  
  76.       Say "Daten der elliptischen Umlaufbahn"
  77.       a_einh = "AE"
  78.       Say "   große Halbachse in" a_einh
  79.       Parse Pull a
  80.       'GetUnitM' a_einh
  81.       IF RC ~= 0 THEN
  82.       DO
  83.          Say "*** Ungültige Streckeneinheit!"
  84.          Exit
  85.       END
  86.       a_m = a * Result
  87.  
  88.       Say "   numerische Exzentrizität (zwischen 0.0 und 1.0)"
  89.       Parse Pull epsilon
  90.       Say "   mittlere Umlaufgeschwindigkeit in km/s"
  91.       Parse Pull vm
  92.       vm_ms = vm*1000
  93.  
  94.       b = a * Sqrt(1 - epsilon*epsilon)
  95.       x = epsilon*a
  96.       y = -b
  97.       vx = vm
  98.       vy = 0
  99.  
  100.       T = 2*PI * a_m / vm_ms     /* ungefähre Umlaufzeit in s */
  101.       IF T < min_T THEN
  102.          min_T = T
  103.       IF a_m > max_a THEN
  104.          max_a = a_m
  105.  
  106.       'NewObject "'name'"' m m_einh x y a_einh vx vy 'km/s 1 0 1 1'
  107.       IF RC ~= 0 THEN
  108.          Say "*** Konnte Planeten nicht anfügen!"
  109.    END /* IF */
  110. END /* DO UNTIL */
  111.  
  112. IF max_a = 0 THEN
  113.    Say "*** Kein Planet eingegeben!"
  114. ELSE DO
  115.    'GetWindowSize'
  116.    Parse Var Result sx sy
  117.    'GetUnitM AE'
  118.    'SetScale' 2*max_a/Result/(Min(sx,sy)/2.25) 'AE'
  119.    'GetUnitS d'
  120.    'SetTime' min_T/Result/200 'd'
  121.    'SetParameter T=1 N=1'
  122.    'SetOptions M=0'
  123. END
  124.  
  125. Exit
  126.  
  127.