O movimento do sistema Sol-Terra-Lua apresentado abaixo é uma simplificação circular do movimento elítico real destes astros. Neste caso, temos um movimento circular simples da Terra em torno do Sol, e um movimento circular composto da Lua em torno da Terra. A animação não foi feita à escala.
Em primeiro lugar é calculado o movimento da Terra, ou seja, são calculadas as coordenadas x e y do movimento circular da Terra, às quais são adicionadas as coordenadas fixas da posição do Sol.
Depois é calculado o movimento da Lua: são calculadas as coordenadas x e y do movimento circular da Lua, às quais são adicionadas as coordenadas da posição da Terra.
Visualização:
<!DOCTYPE html>
<html>
<head>
<title>Gráfico</title>
<meta charset="iso-8859-1">
<script type="text/javascript">
var r1 = 130; // raio da terra
var p1 = 10; // perído da terra em seg.
var r2 = 40; // raio da lua
var p2 = 3; // perído da lua em seg.
var ang1=0, ang2=0; // ângulos da terra e da lua no momento atual
var delta1, delta2; // incrementos nos ângulos da terra e da lua em
// cada chamada da função anima()
var x0 = 300; // coordenadas do sol - fixas
var y0 = 200;
var ctx;
var larg, alt;
function init() {
var c = document.getElementById("cvs");
ctx = c.getContext("2d");
larg = eval( c.getAttribute("width") );
alt = eval( c.getAttribute("height") );
var periodoRelogio = 40;
setInterval("anima()", periodoRelogio);
delta1 = (360*periodoRelogio)/(1000*p1);
delta2 = (360*periodoRelogio)/(1000*p2);
}
function anima() {
// Terra
ang1 += delta1;
x1 = r1 * Math.cos(ang1*Math.PI/180) + x0;
y1 = r1 * Math.sin(ang1*Math.PI/180) + y0;
// Lua
ang2 += delta2;
x2 = r2 * Math.cos(ang2*Math.PI/180) + x1;
y2 = r2 * Math.sin(ang2*Math.PI/180) + y1;
// Desenhar
ctx.fillStyle = "black";
ctx.beginPath();
ctx.rect(0,0,larg,alt);
ctx.fill();
ctx.fillStyle = "#FFFF20";
ctx.beginPath();
ctx.arc(x0,y0,20,0,2*Math.PI);
ctx.fill();
ctx.fillStyle = "#0000FF";
ctx.beginPath();
ctx.arc(x1,y1,10,0,2*Math.PI);
ctx.fill();
ctx.fillStyle = "white";
ctx.beginPath();
ctx.arc(x2,y2,5,0,2*Math.PI);
ctx.fill();
}
</script>
</head>
<body onload="init();">
<canvas width="600" height="400" id="cvs"></canvas>
</body>
</html>