var offsetTop = 10; var dPerihelie = 147 var dAphelie = 152 var petitAxe = 149*2 var grandAxe = dPerihelie + dAphelie var soleil = {x:dPerihelie, y:petitAxe/2 + offsetTop, rayon:10}; var terre = {rayon:5}; var centre = {x:grandAxe/2, y:soleil.y}; /* var perihelie = {x:0,y:soleil.y}; var aphelie = {x:grandAxe, y:soleil.y}; */ function ellipse(context, cx, cy, rx, ry){ context.save(); // save state context.beginPath(); context.translate(cx-rx, cy-ry); context.scale(rx, ry); context.arc(1, 1, 1, 0, 2 * Math.PI, false); context.restore(); context.stroke(); } function positionAuJour(context, cx, cy, rx, ry, jour){ var rotationAngle =0; var i = (365 - jour)/365 * Math.PI * 2; xPos = cx - (rx * Math.sin(i)) * Math.sin(rotationAngle * Math.PI) + (ry * Math.cos(i)) * Math.cos(rotationAngle * Math.PI); yPos = cy + (ry * Math.cos(i)) * Math.sin(rotationAngle * Math.PI) + (rx * Math.sin(i)) * Math.cos(rotationAngle * Math.PI); return {x:xPos, y:yPos}; } function dessineTerre(context, xPos, yPos){ context.beginPath(); context.arc(xPos, yPos, terre.rayon, 0, 2 * Math.PI, false); context.fillStyle = 'green'; context.fill(); context.closePath(); } var jour = 0; var draw = function(){ var canvas = document.getElementById('solar-system'); var context = canvas.getContext('2d'); context.clearRect(0,0, 500, 320); document.getElementById("jour").value = jour; context.beginPath(); context.arc(soleil.x, soleil.y, soleil.rayon, 0, 2 * Math.PI, false); context.fillStyle = 'yellow'; context.fill(); context.closePath(); context.strokeStyle = 'blue'; context.beginPath(); ellipse(context, centre.x, centre.y, grandAxe/2, petitAxe/2); context.stroke(); context.closePath(); var position = positionAuJour(context, centre.x, centre.y, grandAxe/2, petitAxe/2, jour); dessineTerre(context, position.x, position.y); jour++; window.setTimeout(draw, 50); } draw();
<canvas width="500" height="320" id="solar-system"></canvas> <input id="jour" type="text" value="0" />
#solar-system { margin-top:10px; }