xxxxxxxxxx
67
var x = [];
var dx;
var vx = [];
var fx;
var y = [];
var dy;
var vy = [];
var fy;
var dt;
var r;
var I;
let p = 2;
function setup() {
createCanvas(400, 400);
I=2;
dt = 0.0005;
h=1/400;
r=0;
dx = 0;
fx=0;
dy = 0;
fy=0;
x[0]=200;
y[0]=200;
x[1]=200;
y[1]=350;
vx[1] =2000;
vy[1] = 0;
}
function draw() {
background(255,255,255,20);
noStroke();
fill(0);
text("Two Body Gravitational Problem: Elliptic Orbits.",50,50);
text("Sun fixed, Planet moving at distance r ",50,70);
text("Gravitational force on Planet scales with 1/r^2 directed to Sun.",50,90);
text("Explicit time stepping.",50,130);
text("Play with different intial velocities (vx) + time steps",50,110);
text("Test with other powers than 1/r^2",50,150);
text("red: Sun, blue: Planet, black: Gravitational Force",50,170);
fill(255,0,0,255);
ellipse(200,200,20);
for (var i=1; i<I; i++) {
fx=0;
fy=0;
for (var j=0; j<I-1; j++) {
dx = x[i]-x[j];
dy = y[i]-y[j];
r = pow(dx,2)+pow(dy,2);
r =sqrt(r);
fx = fx - 1000*pow(100,p+1)*dx/pow(r,p+1);
fy = fy - 1000*pow(100,p+1)*dy/pow(r,p+1);
}
x[i]=x[i]+vx[i]*dt;
y[i]=y[i]+vy[i]*dt;
vx[i]=vx[i]+fx*dt;
vy[i]=vy[i]+fy*dt;
fill(0,0,255,255);
ellipse(x[i],y[i],5);
}
stroke(0);
line(x[1],y[1],x[1]+(200-x[1])/pow(r/50,2),y[1]+(200-y[1])/pow(r/50,2));
}