1. var G:Number = 100;
  2.  
  3. function calcAcceleration(dot0:MovieClip, dot1:MovieClip):Point
  4. {
  5. var r:Point = new Point(dot1.x - dot0.x, dot1.y - dot0.y);
  6. /*if (r.length < 14.5)
  7. return new Point(0, 0);*/
  8.  
  9. var rSqr:Number = Math.pow(r.length, 2);
  10.  
  11. r.normalize(G * dot1.m / rSqr);
  12.  
  13. return r;
  14. }
  15.  
  16. function normalizePositionVelocity(dot:MovieClip):void
  17. {
  18. /*if (dot.x > 550)
  19. dot.v.x = -Math.abs(dot.v.x);
  20. if (dot.x < 0)
  21. dot.v.x = Math.abs(dot.v.x);
  22. if (dot.y > 400)
  23. dot.v.y = -Math.abs(dot.v.y);
  24. if (dot.y < 0)
  25. dot.v.y = Math.abs(dot.v.y);*/
  26. }
  27.  
  28. function calcKineticEnergy(dot:MovieClip):Number
  29. {
  30. return dot.m * Math.pow(dot.v.length, 2) / 2;
  31. }
  32.  
  33. function calcPotentialEnergy(dot0:MovieClip, dot1:MovieClip):Number
  34. {
  35. var r:Point = new Point(dot1.x - dot0.x, dot1.y - dot0.y);
  36. return -G * dot0.m * dot1.m / r.length;
  37. }
  38.  
  39. addEventListener(Event.ENTER_FRAME, enterFrame)
  40. function enterFrame(event:Event):void
  41. {
  42. dot0.v = dot0.v.add(calcAcceleration(dot0, dot1));
  43. dot0.v = dot0.v.add(calcAcceleration(dot0, dot2));
  44. dot0.v = dot0.v.add(calcAcceleration(dot0, dot3));
  45. normalizePositionVelocity(dot0);
  46.  
  47. dot1.v = dot1.v.add(calcAcceleration(dot1, dot0));
  48. dot1.v = dot1.v.add(calcAcceleration(dot1, dot2));
  49. dot1.v = dot1.v.add(calcAcceleration(dot1, dot3));
  50. normalizePositionVelocity(dot1);
  51.  
  52. dot2.v = dot2.v.add(calcAcceleration(dot2, dot0));
  53. dot2.v = dot2.v.add(calcAcceleration(dot2, dot1));
  54. dot2.v = dot2.v.add(calcAcceleration(dot2, dot3));
  55. normalizePositionVelocity(dot2);
  56.  
  57. dot3.v = dot3.v.add(calcAcceleration(dot3, dot0));
  58. dot3.v = dot3.v.add(calcAcceleration(dot3, dot1));
  59. dot3.v = dot3.v.add(calcAcceleration(dot3, dot2));
  60. normalizePositionVelocity(dot3);
  61.  
  62. dot0.x += dot0.v.x;
  63. dot0.y += dot0.v.y;
  64.  
  65. dot1.x += dot1.v.x;
  66. dot1.y += dot1.v.y;
  67.  
  68. dot2.x += dot2.v.x;
  69. dot2.y += dot2.v.y;
  70.  
  71. dot3.x += dot3.v.x;
  72. dot3.y += dot3.v.y;
  73.  
  74. empty.graphics.lineStyle(1, 0x333333);
  75. empty.graphics.lineTo(dot0.x, dot0.y);
  76.  
  77. var kineticEnergy = calcKineticEnergy(dot0)
  78. + calcKineticEnergy(dot1)
  79. + calcKineticEnergy(dot2)
  80. + calcKineticEnergy(dot3);
  81.  
  82. var potentialEnergy = calcPotentialEnergy(dot0, dot1)
  83. + calcPotentialEnergy(dot0, dot2)
  84. + calcPotentialEnergy(dot0, dot3)
  85. + calcPotentialEnergy(dot1, dot2)
  86. + calcPotentialEnergy(dot1, dot3)
  87. + calcPotentialEnergy(dot2, dot3);
  88.  
  89. kinE.text = new String(kineticEnergy);
  90. potE.text = new String(potentialEnergy);
  91.  
  92. e.text = new String(kineticEnergy + potentialEnergy);
  93. }