|
1 | 1 | #include <stdio.h>
|
2 | 2 |
|
3 |
| -void verlet(double pos, double acc, double dt) { |
4 |
| - double prev_pos, temp_pos, time; |
| 3 | +void verlet(double *time, double pos, double acc, double dt) { |
| 4 | + double prev_pos, temp_pos; |
5 | 5 | prev_pos = pos;
|
6 |
| - time = 0; |
| 6 | + *time = 0.0; |
7 | 7 |
|
8 | 8 | while (pos > 0) {
|
9 |
| - time += dt; |
| 9 | + *time += dt; |
10 | 10 | temp_pos = pos;
|
11 | 11 | pos = pos * 2 - prev_pos + acc * dt * dt;
|
12 | 12 | prev_pos = temp_pos;
|
13 | 13 | }
|
14 |
| - |
15 |
| - printf("%f\n", time); |
16 | 14 | }
|
17 | 15 |
|
18 |
| -void stormer_verlet(double pos, double acc, double dt) { |
19 |
| - double prev_pos, temp_pos, time, vel; |
| 16 | +void stormer_verlet(double *time, double *vel, |
| 17 | + double pos, double acc, double dt) { |
| 18 | + double prev_pos, temp_pos; |
20 | 19 | prev_pos = pos;
|
21 |
| - vel = 0; |
22 |
| - time = 0; |
| 20 | + *vel = 0.0; |
| 21 | + *time = 0.0; |
| 22 | + |
23 | 23 | while (pos > 0) {
|
24 |
| - time += dt; |
| 24 | + *time += dt; |
25 | 25 | temp_pos = pos;
|
26 | 26 | pos = pos * 2 - prev_pos + acc * dt * dt;
|
27 | 27 | prev_pos = temp_pos;
|
28 | 28 |
|
29 |
| - vel += acc * dt; |
| 29 | + *vel += acc * dt; |
30 | 30 | }
|
31 |
| - |
32 |
| - printf("%f\n", time); |
33 | 31 | }
|
34 | 32 |
|
35 |
| -void velocity_verlet(double pos, double acc, double dt) { |
36 |
| - double time, vel; |
37 |
| - vel = 0; |
38 |
| - time = 0; |
| 33 | +void velocity_verlet(double *time, double *vel, |
| 34 | + double pos, double acc, double dt) { |
| 35 | + *vel = 0.0; |
| 36 | + *time = 0.0; |
| 37 | + |
39 | 38 | while (pos > 0) {
|
40 |
| - time += dt; |
41 |
| - pos += vel * dt + 0.5 * acc * dt * dt; |
42 |
| - vel += acc * dt; |
| 39 | + *time += dt; |
| 40 | + pos += (*vel) * dt + 0.5 * acc * dt * dt; |
| 41 | + *vel += acc * dt; |
43 | 42 | }
|
44 |
| - |
45 |
| - printf("%f\n", time); |
46 | 43 | }
|
47 | 44 |
|
48 | 45 | int main() {
|
49 |
| - verlet(5.0, -10, 0.01); |
50 |
| - stormer_verlet(5.0, -10, 0.01); |
51 |
| - velocity_verlet(5.0, -10, 0.01); |
| 46 | + double time, vel; |
| 47 | + |
| 48 | + verlet(&time, 5.0, -10, 0.01); |
| 49 | + printf("Time for Verlet integration is: %lf\n", |
| 50 | + time); |
| 51 | + |
| 52 | + stormer_verlet(&time, &vel, 5.0, -10, 0.01); |
| 53 | + printf("Time and velocity for Stormer Verlet integration is: %lf, %lf\n", |
| 54 | + time, vel); |
| 55 | + |
| 56 | + velocity_verlet(&time, &vel, 5.0, -10, 0.01); |
| 57 | + printf("Time and velocity for velocity Verlet integration is: %lf, %lf\n", |
| 58 | + time, vel); |
52 | 59 |
|
53 | 60 | return 0;
|
54 | 61 | }
|
55 |
| - |
|
0 commit comments