Tôi còn rất mới với lập trình và tôi đã nhận được một bài tập ở trường mà tôi phải tạo ra một mô phỏng quỹ đạo trái đất quanh mặt trời trong p5.js. Chúng tôi đã được cung cấp một cách đơn giản để tính toán lực hấp dẫn nhưng tôi muốn sử dụng công thức thực tế (Fg = G M m / r ^ 2). Trong mã của tôi, một pixel bằng 10 ^ 9 mét hoặc một triệu km. Nếu tôi sử dụng khối lượng thực tế của cả mặt trời và trái đất, cũng như khoảng cách thực tế giữa chúng, tôi phải đặt tốc độ trái đất di chuyển với tốc độ khoảng 1 pixel mỗi giây hoặc một triệu km / giây, xung quanh 30.000 lần tốc độ thực tế của trái đất trên quỹ đạo. Mã của tôi:
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>
Bạn có biết nguyên nhân có thể là gì? Cảm ơn trước.