home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / misc / sci / StarCollapse.lha / analysis next >
Text File  |  1995-08-07  |  7KB  |  243 lines

  1.                       ANIMATED 3-D GRAVITY SIMULATOR
  2.                       ------------------------------
  3.  
  4.                     (c) August 1995 Laurence Vanhelsuwé
  5.  
  6.  
  7.                1. REQUIREMENTS
  8.  
  9.                2. ANALYSIS
  10.  
  11.                3. DESIGN
  12.  
  13.                 3.1 DATA STRUCTURES
  14.                 3.2 LOGIC FLOW
  15.  
  16.                  3.2.1 Calculation of Cloud mass and center of gravity
  17.                  3.2.2 Calculation of gravitational pull on individual mass
  18.                  3.2.3 Calculation of force x,y,z components
  19.                  3.2.4 Calculation of 3-D mass movement from acting force
  20.  
  21.                   3.2.4.1 Calculation of the velocity V from the force F
  22.                   3.2.4.2 Calculation of the velocity vector Vx,Vy,Vz
  23.                   3.2.4.3 Calculation of the new velocity
  24.                   3.2.4.4 Calculation of the new position
  25.  
  26.  
  27. 1. REQUIREMENTS
  28.    ------------
  29.  
  30. We wish to animate the gravitational interaction of a LARGE ( >100 ) number
  31. of masses in 3 dimensions.
  32.  
  33. The idea for this program comes from a desire to animate a galaxy (!) which,
  34. by definition, contains a huge number of point-like masses.
  35. Therefore, 2 main requirements exist:
  36.  
  37.   1) physical accuracy
  38.   2) very high performance
  39.  
  40. The 3-D viewing aspects will not be discussed further as this will be handled
  41. by an already existing sub-system. This viewer will project and allow the
  42. rotation and scaling of any database of (x,y,z) triplets, in real-time.
  43.  
  44.  
  45. 2. ANALYSIS
  46.    --------
  47.  
  48. Since this program is simple, no object-oriented analysis or design will be
  49. undertaken.
  50.  
  51. The main structure of the program is a straight-forward infinte loop:
  52.  
  53.   1) calculate new positions of masses
  54.   2) refresh display using new positions
  55.  
  56. The data structures of the program are equally trivial.
  57.  
  58. The main structure will be the collection of masses.
  59. Masses themselves will be structures holding their physical properties being
  60. modelled (3-D coordinates, mass, velocity).
  61.  
  62.  
  63. 3. DESIGN
  64.    ------
  65.  
  66. 3.1 DATA STRUCTURES
  67.     ---------------
  68.  
  69. The Mass objects are structured as follows:
  70.  
  71.  
  72. Mass is {
  73.  numeric  mass;
  74.  numeric  x,y,z;
  75.  numeric  vx,vy,vz;
  76. }
  77.  
  78. The modelled "cloud" of Masses is simply an array of Mass objects plus a
  79. counter telling us howmany array elements there are:
  80.  
  81. Cloud Mass[MAX_POINTS];
  82.  
  83. numeric NumMasses;
  84.  
  85.  
  86. 3.2 LOGIC FLOW
  87.     ----------
  88.  
  89. Each simulation iteration consists of the following steps:
  90.  
  91.  - calculate mass (M) and center of mass (Mx,My,Mz) for the modelled cloud.
  92.  - foreach individual mass:
  93.    - calculate magnitude of gravitational pull by cloud (F) and associated
  94.       orthogonal force components (Fx,Fy,Fz)
  95.    - calculate 3-D mass movement from acting force
  96.    - move mass
  97.  - output a database of (x,y,z) triplets for viewer pipeline
  98.  
  99. Each step of this outline will now be designed in more detail.
  100.  
  101.  
  102. 3.2.1 Calculation of Cloud mass and center of gravity
  103.       -----------------------------------------------
  104.  
  105. The cloud mass is simply the sum of all its component masses.
  106.  
  107. The cloud center of gravity (Mx,My,Mz) can be calculated as follows:
  108.  
  109.           m1.x1 + m2.x2 + ... mn.xn
  110. (1)  Mx = -------------------------
  111.                 m1+m2+...+mn
  112.  
  113.           m1.y1 + m2.y2 + ... mn.yn
  114. (2)  My = -------------------------
  115.                  m1+m2+...+mn
  116.  
  117.           m1.z1 + m2.z2 + ... mn.zn
  118. (3)  Mz = -------------------------
  119.                  m1+m2+...+mn
  120.  
  121. 3.2.2 Calculation of gravitational pull on individual mass
  122.       ----------------------------------------------------
  123.  
  124. The formula for the Law of Gravity is as follows:
  125.  
  126.                 m1.m2
  127. (4)     F = G . -------
  128.                   2
  129.                  R
  130.  
  131. Where:
  132.  F  is the magnitude of the gravitational force
  133.  G  is the gravity constant (6.33 x 10-11)
  134.  m1 is mass 1
  135.  m2 is mass 2
  136.  R  is the distance between m1 and m2
  137.  
  138.  
  139. Observation: since this simulation is explicitly designed for LARGE sets of
  140. masses, the effect of any single mass on the placement and magnitude of the
  141. cloud's center will be negligable.
  142. Therefore we can simplify calculations to calculate the force of attraction
  143. between any individual mass and the cloud's center of gravity by considering
  144. those two points instead of having to adjust the center of gravity due to the
  145. inclusion of the mass under consideration.
  146.  
  147. The algorithm simply becomes the application of formula (4), with
  148.  m1 = the mass of the current body
  149.  m2 = the mass of the cloud (minus the current body's mass to improve the
  150.       accuracy cheaply)
  151.   2
  152.  R  = (Mx-mx)^2 + (My-my)^2 + (Mz-mz)^2
  153.  
  154. 3.2.3 Calculation of force x,y,z components
  155.       -------------------------------------
  156.  
  157. The magnitude of the force F has to be available as a vector Fx,Fy,Fz too.
  158. This is so that later we can calculate the associated velocity components
  159. Vx,Vy,Vz.
  160.  
  161. The force vector can be calculated as follows:
  162.  
  163.                dx
  164. (5)  Fx = F * ----
  165.                R
  166.  
  167.                dy
  168. (6)  Fy = F * ----
  169.                R
  170.  
  171.                dz
  172. (7)  Fz = F * ----
  173.                R
  174.  
  175. 3.2.4 Calculation of 3-D mass movement from acting force
  176.       --------------------------------------------------
  177.  
  178. This sub-problem can be sub-divided further:
  179.  
  180.  - calculate the velocity V generated by the attraction force F
  181.  - calculate the velocity vector (Vx,Vy,Vz) from V
  182.  - calculate the new velocity of the body
  183.  - calculate the new position of the body by adding velocity to current position
  184.  
  185. 3.2.4.1 Calculation of the velocity V from the force F
  186.         ----------------------------------------------
  187.  
  188. The formula for the Law of Impulse is as follows:
  189.  
  190. (8)  F.dt = m.dV
  191.  
  192. Since we use time increments of one ('1') we can write that:
  193.  
  194.           F
  195. (9)  V = ---
  196.           m
  197.  
  198.  
  199.  
  200. 3.2.4.2 Calculation of the velocity vector Vx,Vy,Vz
  201.         -------------------------------------------
  202.  
  203. In a similar vein to the calculation of the force vector in (5),(6) and (7)
  204. we can write:
  205.  
  206.                Fx
  207. (10) Vx = V * ----
  208.                F
  209.  
  210.                Fy
  211. (11) Vy = V * ----
  212.                F
  213.  
  214.                Fz
  215. (12) Vz = V * ----
  216.                F
  217.  
  218.  
  219.  
  220. 3.2.4.3 Calculation of the new velocity
  221.         -------------------------------
  222.  
  223. The current object's new velocity is obtained by adding the new velocity vector
  224. to the current velocity:
  225.  
  226. (13)  Vx    = Vx    + Vx
  227.         new     old
  228.  
  229. (14),(15) analogous to (13).
  230.  
  231.  
  232. 3.2.4.4 Calculation of the new position
  233.         -------------------------------
  234.  
  235. The object's new position is obtained by adding the new current velocity to
  236. its current position.
  237.  
  238. (16) x    = x   + Vx
  239.       new    old
  240.  
  241. (17),(18) analogous to (16).
  242.  
  243.