所以我在JSFiddle中建立了一個小的重力模擬。這是我的腳本到目前爲止:對象在重力模擬中緩慢漂移到右邊
var elements = [
{
"id": "earth",
"mass": 30,
"left": 30,
"top": 30,
"hSpeed": 300,
"vSpeed": -300
}, {
"id": "sun",
"mass": 5000,
"left": 50,
"top": 50,
"hSpeed": 0,
"vSpeed": 0
}];
var intervalTime = 10;
var intervalID;
var getDistance = function(x1, y1, x2, y2) {
// h^2 = x^2 + y^2
var xD = x1 - x2;
var yD = y1 - y2;
var hSq = xD * xD + yD * yD;
return Math.sqrt(hSq);
};
var getXPortion = function(val, x1, y1, x2, y2) {
var hD = getDistance(x1, y1, x2, y2);
var xD = x2 - x1;
if ((hD == 0) || (xD == 0) || (val == 0)) {
return 0;
}
return val/hD * xD;
};
var getYPortion = function(val, x1, y1, x2, y2) {
var hD = getDistance(x1, y1, x2, y2);
var yD = y2 - y1;
if ((hD == 0) || (yD == 0) || (val == 0)) {
return 0;
}
return val/hD * yD;
};
var animateWorld = function() {
// Calculate the change in speed for each element
// based on the gravity of all the other elements
var i = 0;
var j = 0;
var dist = 0;
var mass = 0;
var grav = 0;
var change = 0;
var chX = 0;
var chY = 0;
for (i in elements) {
for (j in elements) {
if (i != j) {
dist = getDistance(
elements[i].left,
elements[i].top,
elements[j].left,
elements[j].top
);
mass = elements[i].mass * elements[j].mass;
grav = dist == 0 ? 0 : mass/(dist * dist);
change = grav/elements[i].mass;
elements[i].hSpeed += getXPortion(
change,
elements[i].left,
elements[i].top,
elements[j].left,
elements[j].top
);
elements[i].vSpeed += getYPortion(
change,
elements[i].left,
elements[i].top,
elements[j].left,
elements[j].top
);
}
}
}
// Calculate the new position for each element
// based on the speed and move each element to it's new position
for (i in elements) {
elements[i].left += elements[i].hSpeed/1000;
elements[i].top += elements[i].vSpeed/1000;
$('#' + elements[i].id).css('left', elements[i].left + '%');
$('#' + elements[i].id).css('top', elements[i].top + '%');
}
};
$(document).ready(function() {
intervalID = window.setInterval(animateWorld, intervalTime);
});
我允許所有的對象根據各自的質量和距離相互作用。問題是所有的物體都緩慢地向右漂移。由於這是一個封閉的系統,我認爲只有當另一個基於質量向左移動時,纔會向右移動,所以它們應該不可能隨着時間的推移沿同一方向漂移。我認爲正在發生的下列之一,但我不知道其中:
- 在數學中使用浮動點造成導致這種(不太可能)
- 的,我第一次計算,情況略有四捨五入問題每個身體對另一個身體的影響,然後移動他們造成一些偏見。我是這樣的,我該如何解決它?
任何想法?有沒有更簡單的方法來做到這一點?
在第一次看,它看起來像太陽只漂移的權利,但沒有離開,也許這會幫助調試過程 –
你的大地似乎對你的太陽相當大的影響。在開始時將地球的位置改變到右上角,並改變速度向左下方發射,使其反向運行,太陽開始以另一種方式移動 – AeroX
@AeroX。我並沒有試圖建立一個真實的尺度,只是一個逼真的模擬引力效應,不管潛在的假設如何 – neelsg