xxxxxxxxxx
72
let x1, x2;
let y1, y2;
let px2, py2;
let g = 1;
let angle1;
let angle2;
let angle1_v = 0;
let angle2_v = 0;
let r1 = 100;
let r2 = 100;
let m1 = 20;
let m2 = 20;
let trail;
function setup() {
createCanvas(400, 400);
trail = createGraphics(400,400);
trail.background(220);
trail.pixelDensity(1);
angle1 = PI/2;
angle2 = -PI/4;
// x1 = 0;
// y1 = 0;
// x2 = 0;
// y2 = 0;
}
function draw() {
background(220);
image(trail,0,0);
translate(200, 10);
trail.line(x2+200,y2+10,px2+200,py2+10);
px2 = x2;
py2 = y2;
x1 = r1 * sin(angle1);
y1 = r1 * cos(angle1);
x2 = x1 + r2 * sin(angle2);
y2 = y1 + r2 * cos(angle2);
let num1 = -g * (2 * m1 + m2) * sin(angle1);
let num2 = -m2 * g * sin(angle1 - 2 * angle2);
let num3 = -2 * sin(angle1 - angle2) * m2 * (angle2_v * angle2_v * r2 + angle1_v * angle1_v * r1 * cos(angle1 - angle2));
let dem = r1 * (2 * m1 + m2 - m2 * cos(2 * angle1 - 2 * angle2));
let angle1_a = (num1 + num2 + num3) / dem;
num1 = 2 * sin(angle1-angle2)
num2 = (angle1_v*angle1_v* r1*(m1+m2) + g * (m1+m2)*cos(angle1)+angle2_v*angle2_v*r2*m2*cos(angle1-angle2));
dem = r2 * (2 * m1 + m2 - m2 * cos(2 * angle1 - 2 * angle2));
let angle2_a = (num1*num2)/dem;
angle1_v += angle1_a;
angle2_v += angle2_a;
angle1 += angle1_v;
angle2 += angle2_v;
stroke(0);
line(0, 0, x1, y1);
line(x1, y1, x2, y2);
ellipse(x1, y1, 16);
ellipse(x2, y2, 16);
}