1
- fn verlet ( mut pos : f64 , acc : f64 , dt : f64 ) {
1
+ fn verlet ( mut pos : f64 , acc : f64 , dt : f64 ) -> f64 {
2
2
let mut prev_pos = pos;
3
3
let mut time = 0.0 ;
4
4
@@ -9,24 +9,29 @@ fn verlet(mut pos: f64, acc: f64, dt: f64) {
9
9
prev_pos = temp_pos;
10
10
}
11
11
12
- println ! ( "{}" , time) ;
12
+ time
13
13
}
14
14
15
- fn stormer_verlet ( mut pos : f64 , acc : f64 , dt : f64 ) {
15
+ fn stormer_verlet ( mut pos : f64 , acc : f64 , dt : f64 ) -> ( f64 , f64 ) {
16
16
let mut prev_pos = pos;
17
17
let mut time = 0.0 ;
18
+ let mut vel = 0.0 ;
18
19
19
20
while pos > 0.0 {
20
21
time += dt;
21
22
let temp_pos = pos;
22
23
pos = pos * 2.0 - prev_pos + acc * dt * dt;
23
24
prev_pos = temp_pos;
25
+
26
+ // Because acceleration is constant, velocity is
27
+ // straightforward
28
+ vel += acc * dt;
24
29
}
25
30
26
- println ! ( "{}" , time ) ;
31
+ ( time , vel )
27
32
}
28
33
29
- fn velocity_verlet ( mut pos : f64 , acc : f64 , dt : f64 ) {
34
+ fn velocity_verlet ( mut pos : f64 , acc : f64 , dt : f64 ) -> ( f64 , f64 ) {
30
35
let mut time = 0.0 ;
31
36
let mut vel = 0.0 ;
32
37
@@ -36,11 +41,15 @@ fn velocity_verlet(mut pos: f64, acc: f64, dt: f64) {
36
41
vel += acc * dt;
37
42
}
38
43
39
- println ! ( "{}" , time ) ;
44
+ ( time , vel )
40
45
}
41
46
42
47
fn main ( ) {
43
- verlet ( 5.0 , -10.0 , 0.01 ) ;
44
- stormer_verlet ( 5.0 , -10.0 , 0.01 ) ;
45
- velocity_verlet ( 5.0 , -10.0 , 0.01 ) ;
48
+ let time_v = verlet ( 5.0 , -10.0 , 0.01 ) ;
49
+ let ( time_sv, vel_sv) = stormer_verlet ( 5.0 , -10.0 , 0.01 ) ;
50
+ let ( time_vv, vel_vv) = velocity_verlet ( 5.0 , -10.0 , 0.01 ) ;
51
+
52
+ println ! ( "Time for original Verlet integration: {}" , time_v) ;
53
+ println ! ( "Time and velocity for Stormer Verlet integration: {}, {}" , time_sv, vel_sv) ;
54
+ println ! ( "Time and velocity for velocity Verlet integration: {}, {}" , time_vv, vel_vv) ;
46
55
}
0 commit comments