计算轨道物体的位置
Calculate the position of an orbiting object
我正在使用 canvas 创建太阳系动画,但在计算对象的位置 (x,y) 值时遇到问题。
地球绕着太阳转,我需要在每一帧计算和更新地球的位置。并使用地球的位置,我将围绕地球绕月球运行。
相关函数是这样的:
orbitAround : function (master) {
master.makeOrbitCenter();
this.increaseOrbitAngle();
context.rotate(this.orbit.angle * Math.PI/180);
context.translate(this.orbit.distance, 0);
// calculate and update the X and Y position of the earth
// so that luna can orbit around earth
// these are the initial values of earth
this.position.x = master.position.x + this.orbit.distance;
this.position.y = master.position.y;
},
为了简单起见,我画了这张图
假设蓝色圆盘是地球,位于 (300,200)。太阳在(200,200),它们之间的距离是100。地球绕太阳旋转45度后,它的位置是什么?如何使用给定值计算它?
我会这样做:
distance = 100; //distance between earth and sun.
getXPosition = function(angle){
return distance*(Math.cos(Math.PI * (angle/180)));
};
getYPosition = function(angle){
return distance*(Math.sin(Math.PI * (angle/180)));
};
var x = getXPosition(45); //70.71 from the sun
var y = getYPosition(45); //70.71 from the sun
要获得最终排名,请执行以下操作:
x += 200; //200 = sun position
y -= 200; //200 = sun position
看起来你有一些东西在那里工作,但这里有一个细分:
Math.cos
和 Math.sin
return 沿轴的理论 x
和 y
位置。他们需要在 radians.
中给出角度
所以,为了得到45度角的位置,本质上需要先计算度数的弧度。
var degrees = 45;
var radians = degrees * (Math.PI / 180);
这里的结果是0.785398163。然后,您可以使用以下方法获取轨道物体的 x
和 y
坐标:
var x = Math.cos(0.785398163) * distance;
var y = Math.sin(0.785398163) * distance;
单帧的整个过程如下所示:
var distance = 100; // from the centre of orbit
var degrees = 45; // around a 360 degree orbit
var radians = degrees * (Math.PI / 180);
var x = Math.cos(radians) * distance;
var y = Math.sin(radians) * distance;
这是一个非常基本的 fiddle 方形行星和一切。
我正在使用 canvas 创建太阳系动画,但在计算对象的位置 (x,y) 值时遇到问题。
地球绕着太阳转,我需要在每一帧计算和更新地球的位置。并使用地球的位置,我将围绕地球绕月球运行。
相关函数是这样的:
orbitAround : function (master) {
master.makeOrbitCenter();
this.increaseOrbitAngle();
context.rotate(this.orbit.angle * Math.PI/180);
context.translate(this.orbit.distance, 0);
// calculate and update the X and Y position of the earth
// so that luna can orbit around earth
// these are the initial values of earth
this.position.x = master.position.x + this.orbit.distance;
this.position.y = master.position.y;
},
为了简单起见,我画了这张图
假设蓝色圆盘是地球,位于 (300,200)。太阳在(200,200),它们之间的距离是100。地球绕太阳旋转45度后,它的位置是什么?如何使用给定值计算它?
我会这样做:
distance = 100; //distance between earth and sun.
getXPosition = function(angle){
return distance*(Math.cos(Math.PI * (angle/180)));
};
getYPosition = function(angle){
return distance*(Math.sin(Math.PI * (angle/180)));
};
var x = getXPosition(45); //70.71 from the sun
var y = getYPosition(45); //70.71 from the sun
要获得最终排名,请执行以下操作:
x += 200; //200 = sun position
y -= 200; //200 = sun position
看起来你有一些东西在那里工作,但这里有一个细分:
Math.cos
和 Math.sin
return 沿轴的理论 x
和 y
位置。他们需要在 radians.
所以,为了得到45度角的位置,本质上需要先计算度数的弧度。
var degrees = 45;
var radians = degrees * (Math.PI / 180);
这里的结果是0.785398163。然后,您可以使用以下方法获取轨道物体的 x
和 y
坐标:
var x = Math.cos(0.785398163) * distance;
var y = Math.sin(0.785398163) * distance;
单帧的整个过程如下所示:
var distance = 100; // from the centre of orbit
var degrees = 45; // around a 360 degree orbit
var radians = degrees * (Math.PI / 180);
var x = Math.cos(radians) * distance;
var y = Math.sin(radians) * distance;
这是一个非常基本的 fiddle 方形行星和一切。