Javascript/jQuery-开普勒轨道意外加速

Javascript/jQuery-开普勒轨道意外加速,javascript,jquery,math,polar-coordinates,cartesian-coordinates,Javascript,Jquery,Math,Polar Coordinates,Cartesian Coordinates,我一直在用JavaScript实现一个简单的开普勒轨道。我面临的问题是,我必须使用的数学会导致生成的点在一定程度上不准确。我用下面的方程式来确定我的坐标 y=sqrt(r-x^2) 我使用线性增加的X值来确定y坐标(当它接近X的上限时),会导致y值迅速变大。当我尝试沿着我接收到的坐标设置任何动画时,它会加速到方程的极限 目前,我只在笛卡尔平面上计算象限II,我确信有更好的方法可以做到这一点,但我对JavaScript数学方法还相当陌生,不完全确定如何实现我要做的事情 我想知道极坐标是否是计算的方

我一直在用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);
    }


    }
var x=0;
变量y;
var r=10;
var check=setInterval(函数(){topHalf()},20);
函数topHalf(){

如果(Math.pow(x,2)此指令的浮点精度不高(因为0.01不能表示为精确的数字)。每次迭代时,误差都会变得更大

x = x + 0.01;
取代

i = i + 1
x = i * 0.01

误差被平方根进一步放大,也可能被Pow放大。用x*x替换所有的Math.Pow(x,2)

我认为是…“导致Y值很快变小”…当你只想平方一个值时,没有理由使用
Math.Pow()
。使用
x*x
.NB:
setInterval(function(){f()},20)
应该是
setInterval(f,20)
我之所以使用匿名函数来调用我的函数,是因为即使我在变量中声明setInterval,它也会立即调用函数。在变量中调用它可以清除间隔,所以这是必需的。这正是w3schools网站上的做法。我意识到Math.pow()不需要,但我在另一个项目中使用了它,在那里我做了类似的计算,但指数更高。Y很快变小,这就是问题所在。我想知道是否有更好的方法来计算Y,因为我希望点大致相同。看起来Y变小如此快的原因是因为nat函数的余弦。它是一个指数函数,这意味着当它接近极限时,它会加速。我刚刚测试了一个Y值与下一个Y值的比率,它开始接近1,经过数千次迭代后,结束于.46。在大多数计算中,它保持在1左右,当它接近Y=0时,它会加速。所以我必须找出2件事情中的1件,或者是一个乘以x的值,它将以相同的速率缩放比率,或者是总距离,然后运行不同的函数来遍历长度。好的。在星历软件中,我通常看到极坐标。在轨道软件模拟中,我通常看到矢量(2D或3D),模拟质量、加速度和速度。事实上,我遗漏了很多信息。我只是想从中获得一些旋转动画。此后,我用距离向量、质量向量、基于距离向量的加速度向量和基于上述所有向量的速度向量更新了代码。我很欣赏输入,我想我只需要做一些工作更多的研究。现在一切都很好,包括椭圆轨道,现在只做矩阵旋转。再次感谢。