@@ -432,3 +432,72 @@ xlabel('Time (s)'); ylabel('Height (m)');
432
432
Submitted by P. Mekhail
433
433
434
434
![ Verlet LabVIEW] ( verlet_labview.png )
435
+
436
+ #### C
437
+
438
+ ```
439
+ #include <stdio.h>
440
+
441
+ // Simple function for velocity-verlet
442
+ void verlet(double pos, double acc, double dt){
443
+
444
+ // Note that we are using a temp variable for the previous position
445
+ double prev_pos, temp_pos, time;
446
+ prev_pos = pos;
447
+ time = 0;
448
+
449
+ while (pos > 0){
450
+ time += dt;
451
+ temp_pos = pos;
452
+ pos = pos*2 - prev_pos + acc * dt * dt;
453
+ prev_pos = temp_pos;
454
+ }
455
+
456
+ printf("%f\n", time);
457
+
458
+ }
459
+
460
+ // Simple function for stormer-verlet
461
+ void stormer_verlet(double pos, double acc, double dt){
462
+
463
+ double prev_pos, temp_pos, time, vel;
464
+ prev_pos = pos;
465
+ vel = 0;
466
+ time = 0;
467
+ while (pos > 0){
468
+ time += dt;
469
+ temp_pos = pos;
470
+ pos = pos*2 - prev_pos + acc * dt * dt;
471
+ prev_pos = temp_pos;
472
+
473
+ // The acceleration is constant, so the velocity is straightforward
474
+ vel += acc*dt;
475
+ }
476
+
477
+ printf("%f\n", time);
478
+
479
+ }
480
+
481
+ // Simple function for velocity-verlet
482
+ void velocity_verlet(double pos, double acc, double dt){
483
+
484
+ double time, vel;
485
+ vel = 0;
486
+ time = 0;
487
+ while (pos > 0){
488
+ time += dt;
489
+ pos += vel*dt + 0.5*acc * dt * dt;
490
+ vel += acc*dt;
491
+ }
492
+
493
+ printf("%f\n", time);
494
+
495
+ }
496
+
497
+ int main(){
498
+ verlet(5.0, -10, 0.01);
499
+ stormer_verlet(5.0, -10, 0.01);
500
+ velocity_verlet(5.0, -10, 0.01);
501
+
502
+ }
503
+ ```
0 commit comments