20 Double Pendulums
A set of Double Pendulums help us understand the chaos better.
All these pendulums are left with a difference of very very small angle.
At start their motion is quite identical but soon they deviate tremendously from their initial fashion.
Note: You will see some pendulums going to infinity, thats because the method to calculate the angle breaks in some cases.
Code
elem=document.querySelector(".example-container");
setCanvas(elem);
w=WIDTH;
h=HEIGHT;
///////////////////////////////////////////////////////////////////////////////
r1 = 100;
r2 = 100;
m1 = 5;
m2 = 5;
n=20;
m=[];
a1=[];
a2=[];
v1=[];
v2=[];
a_a1=[];
a_a2=[];
g=1;
for(i=0;i<n;i++){
m.push(10);
a1.push(Math.PI/3 +i/1000);
a2.push(Math.PI/3 +i/1000);
v1.push(0);
v2.push(0);
a_a1.push(0);
a_a2.push(0);
}
function draw(){
clearCanvas()
for(i=0;i<n;i++){
let num1 = -g * (2 * m1 + m2) * sin(a1[i]);
let num2 = -m2 * g * sin(a1[i] - 2 * a2[i]);
let num3 = -2 * sin(a1[i] - a2[i]) * m2;
let num4 = v2[i] * v2[i] * r2 + v1[i] * v1[i] * r1 * cos(a1[i] - a2[i]);
let den = r1 * (2 * m1 + m2 - m2 * cos(2 * a1[i] - 2 * a2[i]));
a_a1[i] = (num1 + num2 + num3 * num4) / den;
num1 = 2 * sin(a1[i] - a2[i]);
num2 = v1[i] * v1[i] * r1 * (m1 + m2);
num3 = g * (m1 + m2) * cos(a1[i]);
num4 = v2[i] * v2[i] * r2 * m2 * cos(a1[i] - a2[i]);
den = r2 * (2 * m1 + m2 - m2 * cos(2 * a1[i] - 2 * a2[i]));
a_a2[i] = (num1 * (num2 + num3 + num4)) / den;
x1 = r1 * sin(a1[i]);
y1 = r1 * cos(a1[i]);
x2 = x1 + r2 * sin(a2[i]);
y2 = y1 + r2 * cos(a2[i]);
new line(w/2,0+h/2, w/2+x1, y1+h/2 , `hsl(${mapRange(i,0,n,0,340)},100%,50%)`, 2 );
new line(w/2 + x1, y1 +h/2, w/2+ x2, y2 +h/2 , `hsl(${mapRange(i,0,n,0,340)},100%,50%)`,2);
new circle(w/2+x1, y1 +h/2, m1, `hsl(${mapRange(i,0,n,0,340)},100%,50%)`, "#000000");
new circle(w/2+x2, y2 +h/2, m2, `hsl(${mapRange(i,0,n,0,340)},100%,50%)`, "#000000");
v1[i] += a_a1[i];
v2[i] += a_a2[i];
a1[i] += v1[i];
a2[i] += v2[i];
}
requestAnimationFrame(draw);
}
draw();