home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / misc / sci / gravisimu / gravisimu11.lha / ARexx / stabile_Umkreisung.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  1994-07-01  |  3.9 KB  |  178 lines

  1. /* stabile_Umkreisung.rexx
  2.  *
  3.  * Autor: Thies Wellpott
  4.  * Version: 2.0 (1.7.94)
  5.  *
  6.  * Berechnet für GraviSimu für einen definierbaren Zentralkörper und
  7.  * einen durch verschiedene, wählbare Parameter definierbaren
  8.  * Satelliten eine nach physikalischen Gesetzen stabile Kreisbahn
  9.  *
  10.  * benötigt rexxmathlib.library
  11.  */
  12.  
  13. G = 6.67259e-11         /* Gravitationskonstante */
  14. PI = 3.1415927
  15.  
  16. Call Addlib("rexxmathlib.library",0,-30,0)
  17.  
  18. IF ~Show("Ports", "GRAVISIMU.1") THEN
  19. DO
  20.    Say "GraviSimu ist nicht gestartet!"
  21.    Exit
  22. END
  23.  
  24. Address "GRAVISIMU.1"
  25. Options Results
  26.  
  27. 'GetNumObjects'
  28. IF Result ~= 0 THEN
  29.    Say "*** Achtung! Es sind noch Objekte vorhanden; diese können stören!"
  30.  
  31.  
  32. Options Prompt ">> "
  33.  
  34. Say "Geben Sie den Namen des zentralen Objektes ein"
  35. Parse Pull obj1name
  36. Say "Geben Sie die Masse des zentralen Objektes ein (Kommazahl"
  37. Say "Leerzeichen Masseneinheitsabkürzung)"
  38. Parse Pull obj1m obj1m_einh
  39. 'GetUnitKG' obj1m_einh
  40. IF RC ~= 0 THEN
  41. DO
  42.    Say "*** Ungültige Masseneinheit!"
  43.    Exit
  44. END
  45. obj1m_kg = obj1m * Result
  46.  
  47. 'NewObject "'obj1name'"' obj1m obj1m_einh '0 0 m 0 0 m/s 1 1 0 1'
  48. IF RC ~= 0 THEN
  49. DO
  50.    Say '*** Konnte Objekt "'obj1name'" nicht anfügen!'
  51.    Exit
  52. END
  53.  
  54. Say
  55. Say "Geben Sie den Namen des umkreisenden Objektes ein"
  56. Parse Pull obj2name
  57. Say "Geben Sie die Masse des umkreisenden Objektes ein (Kommazahl"
  58. Say "Leerzeichen Masseneinheitsabkürzung) - muß wesentlich kleiner"
  59. Say "als die Masse des zentralen Objektes sein"
  60. Parse Pull obj2m obj2m_einh
  61. 'GetUnitKG' obj2m_einh
  62. IF RC ~= 0 THEN
  63. DO
  64.    Say "*** Ungültige Masseneinheit!"
  65.    Exit
  66. END
  67. obj2m_kg = obj2m * Result
  68.  
  69. Say
  70. Say "Welchen Wert wollen Sie für das umkreisende Objekt eingeben?"
  71. Say "  1: Radius   2: Umlaufdauer   3: Winkelgeschwindigkeit"
  72. Say "  4: Geschwindigkeit"
  73. Parse Pull x
  74.  
  75. SELECT
  76.    WHEN x = "1" THEN
  77.    DO
  78.       Say "Geben Sie den Umkreisungsradius ein (Kommazahl Leerzeichen"
  79.       Say "Streckeneinheitsabkürzung)"
  80.       Parse Pull r r_einh
  81.       'GetUnitM' r_einh
  82.       IF RC ~= 0 THEN
  83.       DO
  84.          Say "*** Ungültige Streckeneinheit!"
  85.          Exit
  86.       END
  87.       r_m = r * Result
  88.  
  89.       v = Sqrt(G * obj1m_kg / r_m)
  90.       v_einh = "m/s"
  91.       v_ms = v
  92.    END /* 1 */
  93.  
  94.  
  95.    WHEN x = "2" THEN
  96.    DO
  97.       Say "Geben Sie die Umlaufdauer ein (Kommazahl Leerzeichen"
  98.       Say "Zeiteinheitsabkürzung)"
  99.       Parse Pull T T_einh
  100.       'GetUnitS' T_einh
  101.       IF RC ~= 0 THEN
  102.       DO
  103.          Say "*** Ungültige Zeiteinheit!"
  104.          Exit
  105.       END
  106.       T_s = T * Result
  107.  
  108.       r = Pow(G * obj1m_kg * T_s*T_s / (4*PI*PI), 1/3)
  109.       r_einh = "m"
  110.       r_m = r
  111.       v = 2*PI * r / T_s
  112.       v_einh = "m/s"
  113.       v_ms = v
  114.    END /* 2 */
  115.  
  116.  
  117.    WHEN x = "3" THEN
  118.    DO
  119.       Say "Geben Sie die Winkelgeschwindigkeit in Grad pro Sekunde ein"
  120.       Parse Pull w
  121.  
  122.       w = w * PI/180             /* Grad in Radiant */
  123.       r = Pow(G * obj1m_kg / (w*w), 1/3)
  124.       r_einh = "m"
  125.       r_m = r
  126.       v = w * r
  127.       v_einh = "m/s"
  128.       v_ms = v
  129.    END /* 3 */
  130.  
  131.  
  132.    WHEN x = "4" THEN
  133.    DO
  134.       Say "Geben Sie die Geschwindigkeit ein (Kommazahl Leerzeichen"
  135.       Say "Geschwindigkeitseinheitsabkürzung)"
  136.       Parse Pull v v_einh
  137.       'GetUnitMS' v_einh
  138.       IF RC ~= 0 THEN
  139.       DO
  140.          Say "*** Ungültige Geschwindigkeitseinheit!"
  141.          Exit
  142.       END
  143.       v_ms = v * Result
  144.  
  145.       r = G * obj1m_kg / (v_ms * v_ms)
  146.       r_einh = "m"
  147.       r_m = r
  148.    END /* 4 */
  149.  
  150.  
  151.    OTHERWISE
  152.       Say
  153.       Say "*** Ungültige Eingabe!"
  154.       Exit
  155. END /* SELECT */
  156.  
  157. Say
  158.  
  159. 'NewObject "'obj2name'"' obj2m obj2m_einh r '0' r_einh '0' v v_einh '1 1 1 1'
  160. IF RC ~= 0 THEN                  
  161. DO
  162.    Say '*** Konnte Objekt "'obj2name'" nicht anfügen!'
  163.    Exit
  164. END
  165.  
  166. 'GetWindowSize'                     /* Fenstergröße besorgen, diese */
  167. Parse Var Result sx sy              /* soll ausgenutzt werden */
  168.  
  169. 'SetScale' r/(Min(sx,sy)/2.25) r_einh
  170. 'SetTime' 2*PI * r_m/v_ms/1000 's'  /* 1000 Pos. pro Umlauf */
  171.  
  172. 'SetParameter T=1 N=1'              /* ein paar Paramter einstellen */
  173. 'SetOptions CM=0 BP=1 M=0'
  174. 'SetView 0'
  175.  
  176. Exit
  177.  
  178.