C++: Simple Pendulum Animation on Ubuntu Machine
Here is the code to animate simple pendulum on Ubuntu Machine.
We have to add #include <graphics.h>
header file.
If you want to install C/C++ graphic.h
header file on Ubuntu you can visit this post. How to Install graphics.h C/C++ library on Ubuntu
We have to also write int gd = DETECT, gm; initgraph(&gd, &gm, NULL);
initgraph()
initializes the graphics system by loading a graphics driver from disk (or validating a registered driver), and putting the system into graphics mode.
Equations used:-
Angular acceleration of the pendulum:
1
2
3
4
θ'' = − g⁄R sin <br/>
θ = angle of pendulum ( 0= vertical) <br/>
R = length of rod <br/>
g = gravitational constant <br/>
Angular displacement :
1
2
θ(t) = θ0cos(2π/T * t + φ)<br/>
φ is a constant value
Period of oscillation:
1
T ≈ 2π√(R/g)
C++ Implementation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cmath>
#include <graphics.h>
const float Pi = 3.1415926535897931f;
float angular_disp(float t, float angle, float T) //angular displacement
{
//Simple Harmonic Motion equation
float res = angle * cos((2*Pi / T) * t); //let additional const be 0
return res;
}
void animate_pendulum(float x1, float y1,
float l, float g, float angle, float T)
{
int gd = DETECT, gmAngular displacement :
θ(t) = θ0cos(2π/T * t + φ)
φ is a constant value
Period of oscillation:
T ≈ 2π√(R/g);
initgraph(&gd, &gm, NULL);
float angular_acc;//angular acceleration
for(float t = 1.0; t < 100.0;)
{
float new_angle = angular_disp(t, angle, T);
angular_acc = -(g/l) * sin(new_angle);
//To know other end coordinates
float base = l * cos(new_angle);
float height = l * sin(new_angle);
//end coordinates
float y2 = y1 + base;
float x2 = x1 + height;
setlinestyle(DASHED_LINE,0,NORM_WIDTH);
setcolor(WHITE);
line(x1, y1-20, x1, y1+250);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(BLUE);
line(x1, y1, x2, y2);
setcolor(RED);
circle(x2, y2, 10);
floodfill(x2, y2, RED);
delay(100);
cleardevice();
t = t + 1.0;
}
delay(100);
closegraph();
}
int main()
{
float x1 = 250, y1 = 100; //start coordinates of pendulum
float l = 200; //length of pendulum
float g = 10; //acceleration of gravity (assumed)
float angle = Pi/2; // in radians
float T = (2 * Pi) * sqrt(l/g); //period of swing
animate_pendulum(x1, y1, l, g, angle, T);
}
Compile it with the command g++ simplependulum.cpp -o simplependulum -lgraph
Reference:
https://en.wikipedia.org/wiki/Pendulum
https://www.cs.colorado.edu/~main/bgi/doc/initgraph.html
https://www.myphysicslab.com/pendulum/pendulum-en.html