引力计算
Gravitational attraction calculation
我正在尝试做一个简单的二维引力问题,其中每个玩家控制一个粒子。在我尝试修改粒子速度之前,数学似乎很有意义。一旦我移动粒子并且角度变为非 0,粒子就会快速移动到 0,0,然后所有值都变为 NaN。关于为什么会发生这种情况的任何想法?
for(var i in Player.list){
var player = Player.list[i];
if(player.id !== self.id){
var xDisp = self.x - player.x;
var yDisp = self.y - player.y;
var distance = Math.sqrt(Math.pow(xDisp, 2) + Math.pow(yDisp, 2));
var angle = Math.atan2(yDisp, xDisp);
console.log("angle:" + angle);
if(distance !== 0){
attractionAcceleration = GRAVITATIONAL_ATTRACTION_CONSTANT / Math.pow(distance^2); //add mass calculation later when mass is variable
self.spdX += attractionAcceleration * Math.cos(angle);
console.log("self.spdX :" + self.spdX);
self.spdY -= attractionAcceleration * Math.sin(angle);
console.log("self.spdy:" + self.spdY);
}
}
}
问题出在 Math.pow(distance^2)
上,应该是 Math.pow(distance,2)
。这就解释了为什么结果变成了 NaN。
我正在尝试做一个简单的二维引力问题,其中每个玩家控制一个粒子。在我尝试修改粒子速度之前,数学似乎很有意义。一旦我移动粒子并且角度变为非 0,粒子就会快速移动到 0,0,然后所有值都变为 NaN。关于为什么会发生这种情况的任何想法?
for(var i in Player.list){
var player = Player.list[i];
if(player.id !== self.id){
var xDisp = self.x - player.x;
var yDisp = self.y - player.y;
var distance = Math.sqrt(Math.pow(xDisp, 2) + Math.pow(yDisp, 2));
var angle = Math.atan2(yDisp, xDisp);
console.log("angle:" + angle);
if(distance !== 0){
attractionAcceleration = GRAVITATIONAL_ATTRACTION_CONSTANT / Math.pow(distance^2); //add mass calculation later when mass is variable
self.spdX += attractionAcceleration * Math.cos(angle);
console.log("self.spdX :" + self.spdX);
self.spdY -= attractionAcceleration * Math.sin(angle);
console.log("self.spdy:" + self.spdY);
}
}
}
问题出在 Math.pow(distance^2)
上,应该是 Math.pow(distance,2)
。这就解释了为什么结果变成了 NaN。