Système solaire

Objectif:


Créer une animation de système solaire avec: un Soleil immobile au centre, la Terre en mouvement circulaire avec sa trajectoire, de même pour la Lune et un astéroïde et enfin la gestion du choc astéroïde-Terre.


Processing:

État du code 1:

int cx = 250;
int cy = 250;
int r = 100;
int rlune=30;
PImage lune;
PImage soleil;
PImage terre;
PImage asteroide;
int xlune=0;
int ylune=0;
int xasteroide=0;
int yasteroide=0;
int aasteroide=110;
int basteroide=90;
int [] positionLuneX;
int [] positionLuneY;

void setup(){

size(500, 500);

terre = loadImage("terre.png");

soleil=loadImage("soleil.png");

lune=loadImage("lune.png");

asteroide=loadImage("asteroide.png");

positionLuneX = new int [0];

positionLuneY = new int [0];
}

void draw(){

background(0);

stroke(255);
text("(99942) Apophis en collision avec la Terre 13 avril 2036 ?", 20,20);
text(" L'astéroïde mesurant moins d'un kilomètre de diamètre, ",20,50);
text("son impact n'aurait eu que des conséquences « régionales »",20,80);
text("demi-grand axe = 0.92 ua; période= 0,89 a", 20,470);
text("périhélie 0.9 ua, aphélie = 1,1 ua",20,440);

float t = millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

int xlune = (int)(x+rlune*cos(12*t));

int ylune = (int)(y+rlune*sin(12*t));

int xasteroide = (int)(cx+aasteroide*cos(0.89*t+ PI/2));

int yasteroide = (int)(cy+basteroide*sin(0.89*t+PI/2));

positionLuneX= append(positionLuneX,xlune);

positionLuneY= append(positionLuneY,ylune);

println(positionLuneX.length);

for (int i=0;

i<positionLuneX.length-1;i++){

point(positionLuneX[i],positionLuneY[i]);

}


État du code 2:

int cx = 250;

int cy = 250;

int r = 100;

int rlune=30;

PImage lune;

PImage soleil;

PImage terre;

PImage asteroide;

PImage sun;

PImage espace;

int xlune=0;

int ylune=0;

int xasteroide=0;

int yasteroide=0;

int aasteroide=110;

int basteroide=90;

int [] positionLuneX;

int [] positionLuneY;

int compteurPositionlune=0;

PShape globesoleil;

PShape globeterre;

PShape globelune;

PShape globeespace;

PShape globeasteroide;

void setup()

{

size(500,500, P3D);

terre = loadImage("terre.png");

soleil=loadImage("soleil.png");

lune=loadImage("lune.png");

asteroide=loadImage("asteroide.png");

sun=loadImage("sun.jpg");

espace=loadImage("espace.jpg");

globesoleil = createShape(SPHERE, 35);

globeterre = createShape(SPHERE, 20);

globelune = createShape(SPHERE, 5);

globeespace = createShape(SPHERE, 800);

globeasteroide =createShape(SPHERE,5);

globesoleil.setTexture(sun);

globeterre.setTexture(terre);

globelune.setTexture(lune);

globeespace.setTexture(espace);

globeasteroide.setTexture(asteroide);

positionLuneX = new int [0];

positionLuneY = new int [0];

noStroke();

fill(255);

sphereDetail(40);

}

void draw()

{

background(0);

camera(width/2, mouseY, mouseX, width/2, height/2, 0, 0, 1, 0);

text("(99942) Apophis en collision avec la Terre 13 avril 2036 ?", 20, 20);

text(" L'astéroïde mesurant moins d'un kilomètre de diamètre, ", 20, 50);

text("son impact n'aurait eu que des conséquences « régionales »", 20, 80);

text("demi-grand axe = 0.92 ua; période= 0,89 a", 20, 470);

text("périhélie 0.9 ua, aphélie = 1,1 ua", 20, 440);

text("inclinaison 3,3°", 20, 410);

float t = 0.5*millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

int xlune = (int)(x+rlune*cos(12*t));

int ylune = (int)(y+rlune*sin(12*t));

int xasteroide = (int)(cx+2*aasteroide*cos(0.89*t+ PI));

int yasteroide = (int)(cy+1*basteroide*sin(0.89*t+PI));

//positionLuneX[compteurPositionlune]=xlune;

positionLuneX= append(positionLuneX, xlune);

positionLuneY= append(positionLuneY, ylune);

println(positionLuneX.length);

for (int i=0; i<positionLuneX.length-1; i++) {

point(positionLuneX[i], positionLuneY[i]);

}

//positionLuneY[compteurPositionlune]=ylune;

compteurPositionlune++;

noFill();

ellipse(cx, cy, r*4/2, r*4/2);

ellipse(cx, cy, aasteroide*4, basteroide*4/2);

pushMatrix();

translate(250, 250, 0);

noStroke();

// directionalLight(255, 255, 0, 10, -1, 0);

//ambientLight(0,0,255);

//texture(soleil);

// pointLight(xasteroide, yasteroide, 0, width/2, height/2, 3000);

rotateY(PI * frameCount / 500);

shape(globesoleil);

stroke(255);

//sphere(25);

popMatrix();

pushMatrix();

translate(x,y,0);

rotateX(PI*frameCount / 500);

noStroke();

shape(globeterre);

stroke(255);

popMatrix();

pushMatrix();

translate(xlune,ylune,0);

rotateX(PI*frameCount / 500);

noStroke();

shape(globelune);

stroke(255);

popMatrix();

pushMatrix();

translate(5,4,0);

//rotateX(PI/20);

noStroke();

stroke(255);

//ellipse(cx, cy, aasteroide*4, basteroide*4/2);

shape(globeasteroide, xasteroide, yasteroide, 20, 10);

popMatrix();

//ellipse(x, y, rlune*4/2, rlune*4/2);

// translate(0,0,-750);

//rotateZ(0.5);

//rotateX(0.5);

//image (lune, xlune-10, ylune-10, 20, 20);

//image(terre, x-25, y-25, 50, 50);

//affichage_astre(soleil, 225, 225, 50, 50);

//image(soleil, 250-25, 250-25, 50, 50);

pushMatrix();

translate(250,250,0);

noStroke();

shape(globeespace);

stroke(255);

popMatrix();

if ( xasteroide>x-10 && xasteroide<x+10 && yasteroide>y-10 && yasteroide<y+10) {

noLoop();

text("BOUM", 50, 110);

}

}

void affichage_astre( PImage astre, int positionX, int positionY, int tailleX, int tailleY) {

image (astre, positionX, positionY, tailleX, tailleY);


État du code final:

//Déclaration des objets lune, terre, asteroide, sun, espace, explosion d'instance de la class PImage

PImage lune;

PImage terre;

PImage asteroide;

PImage sun;

PImage espace;

PImage explosion;

//Déclaration des variables entières en lien avec les positions du soleil, de l'espace , de la terre, de la lune et de l'asteroide et affectation de leur valeurs

int cx = 250;

int cy = 250;

int r = 100;

int rlune = 30;

int xlune = 0;

int ylune = 0;

int xasteroide = 0;

int yasteroide = 0;

int aasteroide = 110;

int basteroide = 90;

//Déclaration des variables entières des tableaux positionLuneX, positionLuneY et du compteur de position de la lune

int [] positionLuneX;

int [] positionLuneY;

int compteurPositionlune=0;

//Déclaration des objets globesoleil, globeterre, globelune, globeasteroide, globeespace d'instance de la class PShape

PShape globesoleil;

PShape globeterre;

PShape globelune;

PShape globeasteroide;

PShape globeespace;

void setup(){

//Affectation de la tailles et de la dimension (3D) de la fonction size (fenêtre)

size(500, 500, P3D);

//Affectation d'images aux objets d'instance de la class PImage

terre = loadImage("terre plate 2.jpg");

lune = loadImage("lune.png");

asteroide = loadImage("surface asteroide.jpg");

sun = loadImage("surface soleil.jpg");

espace = loadImage("space.jpg");

explosion = loadImage("explosion 2.png");

//Affectation de spheres (sans lignes) avec leur tailles aux objets d'instance de la class PShape

noStroke();

globesoleil = createShape(SPHERE, 35);

globeterre = createShape(SPHERE, 20);

globelune = createShape(SPHERE, 5);

globeasteroide = createShape(SPHERE, 4);

globeespace = createShape(SPHERE, 800);

//Affectation de textures (objets d'instance de la class PImage) aux objets d'instance de la class PShape

globesoleil.setTexture(sun);

globeterre.setTexture(terre);

globelune.setTexture(lune);

globeasteroide.setTexture(asteroide);

globeespace.setTexture(espace);

//Création des tableaux positionLuneX et positionLuneY sans cases

positionLuneX = new int [0];

positionLuneY = new int [0];

}

void draw(){

//Affectation de la couleur a la fonction background (fond d'écran)

background(0);

//Affectation des paramétres de la fonction camera

camera(width/2, mouseY, mouseX, width/2, height/2, 0, 0, 1, 0);

//Affichage des textes

text("(99942) Apophis en collision avec la Terre 13 avril 2036 ?", 40, 20, 30);

text(" L'astéroïde mesurant moins d'un kilomètre de diamètre, ", 40, 50, 30);

text("son impact n'aurait eu que des conséquences « régionales »", 40, 80, 30);

text("demi-grand axe = 0.92 ua; période= 0,89 a", 40, 440, 30);

text("périhélie 0.9 ua, aphélie = 1,1 ua", 40, 410, 30);

text("inclinaison 3,3°", 40, 380, 30);

//Déclaration d'une variable à virgule, t (temps) et affectation de la valeur

float t = 0.5*millis()/1000.0f;

//Déclaration des variables entières x (x terre) et y (y terre) et affectation de leur valeurs (trajectoire de la terre)

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

//Déclaration des variables entières xlune et ylune et affectation de leur valeurs (trajectoire de la lune)

int xlune = (int)(x+rlune*cos(12*t));

int ylune = (int)(y+rlune*sin(12*t));

//Déclarartion des variables entières xasteroide et yasteroide et affectation de leur valeurs (trajectoire de l'asteroide)

int xasteroide = (int)(cx+2*aasteroide*cos(0.89*t+ PI/2));

int yasteroide = (int)(cy+basteroide*sin(0.89*t+PI/2));

//positionLuneX[compteurPositionlune] = xlune;

positionLuneX = append(positionLuneX, xlune);

//positionLuneY[compteurPositionlune] = ylune;

positionLuneY = append(positionLuneY, ylune);

//Affichage des points du passage de la lune

for (int i = 0; i<positionLuneX.length-1; i++) {

point(positionLuneX[i], positionLuneY[i]);

compteurPositionlune++;

}

//Affichage des points du passage de la lune sur la console

println(positionLuneX.length);

//Affichage des trajectoires de la terre et de l'asteroide

noFill();

ellipse(cx, cy, r*4/2, r*4/2);

ellipse(cx, cy, aasteroide*4, basteroide*4/2);

stroke(255);

//Affichage de l'objet globesoleil, de sa position et de sa rotation

pushMatrix();

translate(cx, cy, 0);

rotateY(PI * frameCount / 500);

shape(globesoleil);

popMatrix();

//Affichage de la lumière

pointLight(255, 255, 255, 255, 255, 100);

//Affichage de l'objet globeterre, de sa position et de sa rotation

pushMatrix();

translate(x, y, 0);

rotateX(PI*frameCount / 500);

shape(globeterre);

popMatrix();

//Affichage de l'objet globelune, de sa position et de sa rotation

pushMatrix();

translate(xlune, ylune, 0);

rotateX(PI*frameCount / 500);

shape(globelune);

popMatrix();

//Affichage de l'objet globeasteroide, de sa position et de sa rotation

pushMatrix();

translate(xasteroide, yasteroide, 0);

rotateY(PI*frameCount/50);

shape(globeasteroide, 4, 3, 15, 10);

popMatrix();

//Affichage de l'objet globeespace et de sa position

pushMatrix();

translate(cx, cy, 0);

shape(globeespace);

popMatrix();

//Affichage du texte "Collision" et de l'objet explosion lorsque l'asteroide percute la terre (c'est la fin de l'animation)

if ( xasteroide>x-10 && xasteroide<x+10 && yasteroide>y-20 && yasteroide<y+20) {

noLoop();

text("Collision", 100, 180, 120);

image(explosion, xasteroide-50, yasteroide-50, 90, 90);

}

}


État du code final ordonné:

Void_asteroide:

void creation_asteroide(){

asteroide = loadImage("surface asteroide.jpg");

explosion = loadImage("explosion 2.png");

globeasteroide = createShape(SPHERE, 4);

globeasteroide.setTexture(asteroide);

}

void affichage_asteroide(){

float t = 0.5*millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

int xasteroide = (int)(cx+2*aasteroide*cos(0.89*t+ PI/2));

int yasteroide = (int)(cy+basteroide*sin(0.89*t+PI/2));

noFill();

ellipse(cx, cy, aasteroide*4, basteroide*4/2);

stroke(255);

pushMatrix();

translate(xasteroide, yasteroide, 0);

rotateY(PI*frameCount/50);

shape(globeasteroide, 4, 3, 15, 10);

popMatrix();

if ( xasteroide>x-10 && xasteroide<x+10 && yasteroide>y-20 && yasteroide<y+20) {

noLoop();

text("Collision", 100, 180, 120);

image(explosion, xasteroide-50, yasteroide-50, 90, 90);

}

}

Void_espace:

void creation_espace(){

espace = loadImage("space.jpg");

globeespace = createShape(SPHERE, 800);

globeespace.setTexture(espace);

}

void affichage_espace(){

pushMatrix();

translate(cx, cy, 0);

shape(globeespace);

popMatrix();

}

Void_lune:

void creation_lune(){

lune = loadImage("lune.png");

globelune = createShape(SPHERE, 5);

globelune.setTexture(lune);

positionLuneX = new int [0];

positionLuneY = new int [0];

}

void affichage_lune(){

float t = 0.5*millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

int xlune = (int)(x+rlune*cos(12*t));

int ylune = (int)(y+rlune*sin(12*t));

positionLuneX = append(positionLuneX, xlune);

positionLuneY = append(positionLuneY, ylune);

for (int i = 0; i<positionLuneX.length-1; i++) {

point(positionLuneX[i], positionLuneY[i]);

compteurPositionlune++;

}

println(positionLuneX.length);

pushMatrix();

translate(xlune, ylune, 0);

rotateX(PI*frameCount / 500);

shape(globelune);

popMatrix();

}

Void_soleil:

void creation_soleil(){

soleil = loadImage("surface soleil.jpg");

globesoleil = createShape(SPHERE, 35);

globesoleil.setTexture(soleil);

}

void affichage_soleil(){

float t = 0.5*millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

pushMatrix();

translate(cx, cy, 0);

rotateY(PI * frameCount / 500);

shape(globesoleil);

popMatrix();

pointLight(255, 255, 255, 255, 255, 100);

}

Void_terre:

void creation_terre(){

terre = loadImage("terre plate 2.jpg");

globeterre = createShape(SPHERE, 20);

globeterre.setTexture(terre);

}

void affichage_terre(){

float t = 0.5*millis()/1000.0f;

int x = (int)(cx+r*cos(t));

int y = (int)(cy+r*sin(t));

noFill();

ellipse(cx, cy, r*4/2, r*4/2);

stroke(255);

pushMatrix();

translate(x, y, 0);

rotateX(PI*frameCount / 500);

shape(globeterre);

popMatrix();

}

Système_solaire:

PImage lune;

PImage terre;

PImage asteroide;

PImage soleil;

PImage espace;

PImage explosion;

int cx = 250;

int cy = 250;

int r = 100;

int rlune = 30;

int xlune = 0;

int ylune = 0;

int xasteroide = 0;

int yasteroide = 0;

int aasteroide = 110;

int basteroide = 90;

int [] positionLuneX;

int [] positionLuneY;

int compteurPositionlune=0;

PShape globesoleil;

PShape globeterre;

PShape globelune;

PShape globeasteroide;

PShape globeespace;

void setup(){

size(500, 500, P3D);

noStroke();

creation_soleil();

creation_terre();

creation_lune();

creation_espace();

creation_asteroide();

}

void draw(){

background(0);

camera(width/2, mouseY, mouseX, width/2, height/2, 0, 0, 1, 0);

text("(99942) Apophis en collision avec la Terre 13 avril 2036 ?", 40, 20, 30);

text(" L'astéroïde mesurant moins d'un kilomètre de diamètre, ", 40, 50, 30);

text("son impact n'aurait eu que des conséquences « régionales »", 40, 80, 30);

text("demi-grand axe = 0.92 ua; période= 0,89 a", 40, 440, 30);

text("périhélie 0.9 ua, aphélie = 1,1 ua", 40, 410, 30);

text("inclinaison 3,3°", 40, 380, 30);

affichage_soleil();

affichage_terre();

affichage_lune();

affichage_espace();

affichage_asteroide();

}

Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer