@@ -98,23 +98,25 @@ mod NBodySystem {
98
98
99
99
pub fn advance_one ( bi : & mut Body :: props ,
100
100
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 ;
105
106
106
- let dSquared = dx * dx + dy * dy + dz * dz;
107
+ let dSquared = dx * dx + dy * dy + dz * dz;
107
108
108
- let distance = :: libc:: sqrt ( dSquared) ;
109
- let mag = dt / ( dSquared * distance) ;
109
+ let distance = :: libc:: sqrt ( dSquared) ;
110
+ let mag = dt / ( dSquared * distance) ;
110
111
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;
114
115
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
+ }
118
120
}
119
121
120
122
pub fn move_ ( b : & mut Body :: props , dt : float ) {
@@ -123,36 +125,41 @@ mod NBodySystem {
123
125
b. z += dt * b. vz ;
124
126
}
125
127
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 ;
150
160
}
151
-
152
- i += 1 ;
161
+ return e;
153
162
}
154
- return e;
155
-
156
163
}
157
164
}
158
165
0 commit comments