【发布时间】:2014-01-30 15:11:27
【问题描述】:
我一直在努力实现一个简单的开普勒轨道,以证明我正在使用 JavaScript 进行概念验证。我面临的问题是我必须使用的数学会导致生成的点存在一定程度的不准确性。我正在使用以下等式来确定我的坐标。
y = sqrt(r-x^2)
我使用线性增加的 X 值来确定我的 y 坐标(当它接近 X 的上限时)导致 Y 值迅速变大。当我尝试沿接收到的坐标为任何东西设置动画时,它会加速到我的方程的极限。
目前我只在我的笛卡尔平面上计算象限 II,我确信有更好的方法来做到这一点,但是我对 JavaScript 数学方法相当陌生,并不完全确定如何实现我想要的做。
我想知道极坐标是否可能是计算的方式,然后如果可能的话,使用函数r = sqrt(x^2 + y^2) 和已知的x,y 坐标转换为笛卡尔坐标。
就像我说的那样,我不完全确定如何完成此操作或是否可能。以下是我到目前为止的来源。提前感谢您的帮助!
var x = 0;
var y;
var r = 10;
var check = setInterval(function(){topHalf()}, 20);
function topHalf(){
if (Math.pow(x,2) <= 10){
y = Math.sqrt(r-(Math.pow(x,2)));
x = x + 0.01;
$('#orb').offset({top:y*100, left:x*100});
}else{
console.log('done');
clearInterval(check);
}
}
【问题讨论】:
-
我认为是...'导致Y值迅速变小'...
-
当您只想对一个值求平方时,没有理由使用
Math.pow()。使用x * x。 -
注意:
setInterval(function() { f() }, 20)应该只是setInterval(f, 20) -
我使用匿名函数来调用我的函数的原因是,即使我在变量中声明 setInterval,它也会立即调用该函数。在变量中调用它可以让我清除间隔,所以它是必需的。这正是他们在 w3schools 网站上的做法。我意识到不需要 Math.pow() ,但是我在另一个项目中使用它,在那里我进行了类似的计算,但指数更高。 Y 很快变小,这就是问题所在。我想知道是否有更好的方法来计算 Y,因为我希望这些点大致相同。
标签: javascript jquery math polar-coordinates cartesian-coordinates