1
1
#include < iostream>
2
2
3
3
// Simple function for velocity-verlet
4
- void verlet (double pos, double acc, double dt) {
4
+ double verlet (double pos, double acc, double dt) {
5
5
6
- // Note that we are using a temp variable for the previous position
7
- double prev_pos, temp_pos, time ;
8
- prev_pos = pos;
9
- time = 0 ;
6
+ double prev_pos = pos;
7
+ double time = 0 ;
10
8
11
9
while (pos > 0 ) {
12
10
time += dt;
13
- temp_pos = pos;
14
- pos = pos * 2 - prev_pos + acc * dt * dt ;
15
- prev_pos = temp_pos ;
11
+ double next_pos = pos * 2 - prev_pos + acc * dt * dt ;
12
+ prev_pos = pos;
13
+ pos = next_pos ;
16
14
}
17
15
18
- std::cout << time << ' \n ' ;
16
+ return time ;
19
17
}
20
18
21
19
// Simple function for stormer-verlet
22
- void stormer_verlet (double pos, double acc, double dt) {
20
+ double stormer_verlet (double pos, double acc, double dt) {
23
21
24
- // Note that we are using a temp variable for the previous position
25
- double prev_pos, temp_pos, time , vel;
26
- prev_pos = pos;
27
- vel = 0 ;
28
- time = 0 ;
22
+ double prev_pos = pos;
23
+ double time = 0 ;
24
+ double vel = 0 ;
29
25
while (pos > 0 ) {
30
26
time += dt;
31
- temp_pos = pos;
32
- pos = pos * 2 - prev_pos + acc * dt * dt ;
33
- prev_pos = temp_pos ;
27
+ double next_pos = pos * 2 - prev_pos + acc * dt * dt ;
28
+ prev_pos = pos;
29
+ pos = next_pos ;
34
30
35
31
// The acceleration is constant, so the velocity is straightforward
36
32
vel += acc * dt;
37
33
}
38
34
39
- std::cout << time << ' \n ' ;
35
+ return time ;
40
36
}
41
37
42
- void velocity_verlet (double pos, double acc, double dt) {
38
+ double velocity_verlet (double pos, double acc, double dt) {
43
39
44
- double time , vel;
45
- vel = 0 ;
46
- time = 0 ;
40
+ double time = 0 ;
41
+ double vel = 0 ;
47
42
while (pos > 0 ) {
48
43
time += dt;
49
44
pos += vel * dt + 0.5 * acc * dt * dt;
50
45
vel += acc * dt;
51
46
}
52
47
53
- std::cout << time << ' \n ' ;
48
+ return time ;
54
49
}
55
50
56
51
int main () {
@@ -61,7 +56,7 @@ int main() {
61
56
// For example, if your acceleration chages as a function of time, you might
62
57
// need to also change the acceleration to be read into each of these
63
58
// functions
64
- verlet (5.0 , -10 , 0.01 );
65
- stormer_verlet (5.0 , -10 , 0.01 );
66
- velocity_verlet (5.0 , -10 , 0.01 );
59
+ std::cout << verlet (5.0 , -10 , 0.01 ) << std::endl ;
60
+ std::cout << stormer_verlet (5.0 , -10 , 0.01 ) << std::endl ;
61
+ std::cout << velocity_verlet (5.0 , -10 , 0.01 ) << std::endl ;
67
62
}
0 commit comments