在JS中围绕旋转对象旋转对象

Rotate an object around a rotating object in JS

本文关键字:旋转 对象 JS      更新时间:2023-09-26

我有一个小的太阳系Javascript项目。我已经找到了如何在不担心x和y位置的情况下绕太阳完美旋转SVG对象的方法。(我知道,行星是椭圆旋转的,这并不重要。)

这就是代码。

 function rotate_point(pointX, pointY, originX, originY, ang) {
        ang =  ang * Math.PI / 180.0;
        return {
            x: Math.cos(ang) * (pointX-originX) - Math.sin(ang) * (pointY-originY) + originX ,
            y: Math.sin(ang) * (pointX-originX) + Math.cos(ang) * (pointY-originY) + originY 
        };} // rotate_point

不过,我一辈子都不能让月球绕地球旋转,因为地球本身在旋转,无法足够准确地定位。我不是在一个完美的圆圈里,但它永远不会以地球中心为轴旋转,所以它一直向一边膨胀。我试过调整它的x和y位置,旋转速度,什么都没有。

有人能看到我绕地球完美旋转月球的代码中有什么问题吗?

小提琴来了:

https://jsfiddle.net/yf3sgsu5/

我认为你的问题是,在你试图进行月球自转之前,你正在移动地球元素。因此,当你做月球部分时,卫星轨道的中心已经改变了。你会得到一个椭圆轨道,因为半径取决于地球是向月球移动还是远离月球。

在移动地球之前,你需要读取地球的cx,cy。或者你可以独立计算轨道位置(见下文)。

https://jsfiddle.net/yf3sgsu5/3/