Ich bin sehr neu in der Programmierung und habe eine Schulaufgabe bekommen, für die ich in p5.js eine Simulation der Erdumlaufbahn um die Sonne erstellen muss. Uns wurde eine vereinfachte Methode zur Berechnung der Anziehungskraft angeboten, aber ich wollte die tatsächliche Formel verwenden (Fg = G M m / r ^ 2). In meinem Code entspricht ein Pixel 10 ^ 9 Metern oder einer Million km. Wenn ich die tatsächlichen Massen von Sonne und Erde sowie den tatsächlichen Abstand zwischen ihnen verwende, muss ich die Geschwindigkeit, mit der sich die Erde bewegt, auf etwa 1 Pixel pro Sekunde oder eine Million km / s einstellen, was ungefähr der Fall ist 30.000-fache Geschwindigkeit der Erde im Orbit. Mein Code:
x = 550;
y = 400;
vy = -1;
vx = 0;
dt = 1;
sunSize = 80;
planetSize = 10;
// 1 pixel equals 1 million km
canvasSize = 800;
starAmount = 600;
function setup() {
frameRate(60);
noStroke()
solarXY = 0.5 * canvasSize;
xSun = solarXY;
ySun = solarXY;
createCanvas(canvasSize, canvasSize);
M = 1.989 * pow(10, 30);
m = 5.972 * pow(10, 24);
background(0);
for (i = 0; i < starAmount; i++) {
starX = Math.random() * canvasSize;
starY = Math.random() * canvasSize;
starSize = Math.random() * 3 + 1
ellipse(starX, starY, starSize, starSize);
}
fill(255, 192, 0);
ellipse(xSun, ySun, sunSize, sunSize);
}
function draw() {
r = sqrt(sq(xSun - x) + sq(ySun - y)) * pow(10, 9);
Fg = 6.67 * pow(10, -11) * m * M / sq(r);
if (x >= xSun) {
angle = atan((ySun - y) / (x - xSun));
} else {
angle = PI + atan((ySun - y) / (x - xSun));
}
xOld = x;
yOld = y;
Fgx = cos(angle) * Fg
Fgy = sin(angle) * Fg
ay = Fgy / m;
ax = -Fgx / m;
vy += ay * dt;
vx += ax * dt;
y += vy * dt;
x += vx * dt;
fill(30);
ellipse(xOld, yOld, planetSize, planetSize);
fill(0, 0, 192);
ellipse(x, y, planetSize, planetSize);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
Wissen Sie, was die Ursache sein könnte? Danke im Voraus.