@@ -98,23 +98,25 @@ mod NBodySystem {
9898
9999 pub fn advance_one ( bi : & mut Body :: props ,
100100 bj : & mut Body :: props ,
101- dt : float ) unsafe {
102- let dx = bi. x - bj. x ;
103- let dy = bi. y - bj. y ;
104- let dz = bi. z - bj. z ;
101+ dt : float ) {
102+ unsafe {
103+ let dx = bi. x - bj. x ;
104+ let dy = bi. y - bj. y ;
105+ let dz = bi. z - bj. z ;
105106
106- let dSquared = dx * dx + dy * dy + dz * dz;
107+ let dSquared = dx * dx + dy * dy + dz * dz;
107108
108- let distance = :: libc:: sqrt ( dSquared) ;
109- let mag = dt / ( dSquared * distance) ;
109+ let distance = :: libc:: sqrt ( dSquared) ;
110+ let mag = dt / ( dSquared * distance) ;
110111
111- bi. vx -= dx * bj. mass * mag;
112- bi. vy -= dy * bj. mass * mag;
113- bi. vz -= dz * bj. mass * mag;
112+ bi. vx -= dx * bj. mass * mag;
113+ bi. vy -= dy * bj. mass * mag;
114+ bi. vz -= dz * bj. mass * mag;
114115
115- bj. vx += dx * bi. mass * mag;
116- bj. vy += dy * bi. mass * mag;
117- bj. vz += dz * bi. mass * mag;
116+ bj. vx += dx * bi. mass * mag;
117+ bj. vy += dy * bi. mass * mag;
118+ bj. vz += dz * bi. mass * mag;
119+ }
118120 }
119121
120122 pub fn move_ ( b : & mut Body :: props , dt : float ) {
@@ -123,36 +125,41 @@ mod NBodySystem {
123125 b. z += dt * b. vz ;
124126 }
125127
126- pub fn energy ( bodies : & [ Body :: props ] ) -> float unsafe {
127- let mut dx;
128- let mut dy;
129- let mut dz;
130- let mut distance;
131- let mut e = 0.0 ;
132-
133- let mut i = 0 ;
134- while i < 5 {
135- e +=
136- 0.5 * bodies[ i] . mass *
137- ( bodies[ i] . vx * bodies[ i] . vx + bodies[ i] . vy * bodies[ i] . vy
138- + bodies[ i] . vz * bodies[ i] . vz ) ;
139-
140- let mut j = i + 1 ;
141- while j < 5 {
142- dx = bodies[ i] . x - bodies[ j] . x ;
143- dy = bodies[ i] . y - bodies[ j] . y ;
144- dz = bodies[ i] . z - bodies[ j] . z ;
145-
146- distance = :: libc:: sqrt ( dx * dx + dy * dy + dz * dz) ;
147- e -= bodies[ i] . mass * bodies[ j] . mass / distance;
148-
149- j += 1 ;
128+ pub fn energy ( bodies : & [ Body :: props ] ) -> float {
129+ unsafe {
130+ let mut dx;
131+ let mut dy;
132+ let mut dz;
133+ let mut distance;
134+ let mut e = 0.0 ;
135+
136+ let mut i = 0 ;
137+ while i < 5 {
138+ e +=
139+ 0.5 * bodies[ i] . mass *
140+ ( bodies[ i] . vx * bodies[ i] . vx
141+ + bodies[ i] . vy * bodies[ i] . vy
142+ + bodies[ i] . vz * bodies[ i] . vz ) ;
143+
144+ let mut j = i + 1 ;
145+ while j < 5 {
146+ dx = bodies[ i] . x - bodies[ j] . x ;
147+ dy = bodies[ i] . y - bodies[ j] . y ;
148+ dz = bodies[ i] . z - bodies[ j] . z ;
149+
150+ distance = :: libc:: sqrt ( dx * dx
151+ + dy * dy
152+ + dz * dz) ;
153+ e -= bodies[ i] . mass
154+ * bodies[ j] . mass / distance;
155+
156+ j += 1 ;
157+ }
158+
159+ i += 1 ;
150160 }
151-
152- i += 1 ;
161+ return e;
153162 }
154- return e;
155-
156163 }
157164}
158165
0 commit comments