Je cherche à faire une video pour montrer le phénomène de précession de l'axe de la terre. Je joins le code ci-dessous.
J'utilise une double rotation : rotateZ() pour le balayage de gauche à droite et inversement et rotateZ() pour le balayage avant-arrière et inversement. La représentation restitue le phénomène mais faussement puisque quand la sphère bascule vers l'avant (hémisphère nord dilaté), l'axe devrait être en avant de l'écran et inversement il devrait être en arrière quand la sphère bascule en arrière (hémisphère sud dilaté). Voici un exemple qui image ce que je cherche. (https://www.youtube.com/watch?v=qlVgEoZDjok)
Merci d'avance de votre aide
Capitoul
float mu = 0;
float deltaMu = 2*PI/200;
float rho=PI/6;
float deltaRho = 2*PI/200;
int rayonTerre = 50;
float iter =0;
void setup() {
size(800, 600, P3D);
frameRate(40);
//ortho(-width/2, width/2, -height/2, height/2, 0, 2000);
}
void draw () {
background(50, 50, 50);
pushMatrix();
translate(width/2, 3*height/4);
rotateZ(-mu);
rotateX(rho);
// Tracé sphere
fill(67, 185, 238, 128);
noStroke();
sphere(rayonTerre);
// Tracé axe de rotation
stroke(255);
strokeWeight(2);
line(0, 100, 0, 0, -300, 0);
// Tracé équateur
pushMatrix();
rotateX(PI/2);
noFill();
stroke(255);
ellipse(0, 0, 2*rayonTerre+3, 2*rayonTerre+3);
popMatrix();
popMatrix();
// tracé extrémité de l'axe
translate (width/2, height/3.6, 0);
rotateX(PI/2.9);
stroke(67, 185, 238, 128);
noFill();
sphere(5);
ellipse(0, 0, 260, 250);
// iterations
iter=iter+1;
mu= (-PI/7) * sin(iter*2*PI/200);
rho=(PI/7) * cos(iter*2*PI/200);
if (iter>=200) {
iter=0;
}
}
Hors ligne