viernes, 12 de mayo de 2017

Proyecto Final-Terminado

Tras varios tutoriales y algunos programas que se quedaron en nada, he conseguido terminar finalmente el programa de final de curso.







Explicación del ejercicio :


Mi idea ha sido desde el principio programar en el entorno de desarrollo "Processing" un programa que represente el sistema solar, con el Sol en el centro de el y los nueve planetas (Mercurio, Venus, Tierra...) que giren en torno a el.

Sabemos que el movimiento es algo relativo, pero en este caso partimos del supuesto básico de que el Sol es el centro y que no se mueve (aunque si lo haga, en torno a la Vía Láctea siendo el movimiento de los planetas en torno al Sol algo así:)

Resultado de imagen de movimiento sistema solar






En definitiva he creado una sencilla y básica representación del Sistema Solar. Tratando de reproducir lo más fielmente que he podido el sistema, en él, tanto el tamaño de los planetas, como la distancia entre ellos y su velocidad las he representado a escala.

Pero y, ¿qué pasa si queremos que estos se muevan más rápido porque consideramos que en nuestra representación van muy lento? o incluso queremos que sean más grandes. Pues para ello he creado unas variables que nos permiten modificar ambos parámetros y que en conjunto, todos los planetas se vean involucrados.

Eso sí, no he podido lograr que el Sol tenga un tamaño a escala con los demás planetas, pues como podríamos suponer  ¡¡ ES TAN GRANDE QUE NO CABE EN LA PANTALLA !!

EL CÓDIGO FUENTE DEL PROGRAMA ES EL SIGUIENTE : 


void setup (){
  size (720,720,P3D);
  noStroke ();
}

float r;
float x; 
float v;
float VM,VV,VT,Vm,VJ,VS,VU,VN;

void draw (){
  
    r = 0.5;  
  
  //En este programa, los tamaños de los planetas están a escala, esta variable sirve
  //para que en caso de desearlo, aumenten o disminuyan los tamaños de los planetas.
  //Se basa en la  idea de que conocido el radio de un planeta, Mercurio en este caso,
  //estableciendo una relación entre los radios de los planetas, podemos averiguar el 
  //tamaño del resto de planetas
  
  
  x = 2440/r; 
  
  //Esta variable representa un factor por el que tenemos que dividir para transformar el tamaño 
  //de los planetas
  
  
  
  v = 0.02;
  
  //Velocidad orbital de Mercurio, la tomamos como referencia para 
  //las demás velocidades orbitales, en función de si queremos que el programa vaya
  //más despacio o más deprisa, la podemos modificar.
  
  
  VM = 48;      //Velocidad orbital de Mercurio
  VV = 35.4;    //Velocidad orbital de Venus
  VT = 30;      //Velocidad orbital de la Tierra  
  Vm = 24.3;    //Velocidad orbital de Marte
  VJ = 13.2;    //Velocidad orbital de Júpiter
  VS = 9.7;     //Velocidad orbital de Saturno
  VU = 6.8;     //Velocidad orbital de Urano
  VN = 5.5;     //Velocidad orbital de Neptuno
  
  camera (300,50,300, width/2, height/2 ,0,0,1,0);
  background (0);
  lights();
  
  //Sol
  translate (width/2, height/3, 0);
  fill (255,210,0);
  sphere (90);
  
  
  //Mercurio
  pushMatrix ();
  noStroke ();
  rotateY(frameCount * -PI * v); 
  translate (100,0,0);
  fill (153,153,153); //El modelo de colores RGB (Red,Green,Blue) trata de emular lo más fielmente a los planetas
  sphere(r);
  popMatrix ();
  
  
  //Venus
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VV/VM));
  translate (110,0,0);
  fill (204,102,51);
  sphere (6052/x);
  popMatrix ();
  
  //Tierra
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VT/VM));
  translate (120,0,0);
  fill (0,0,51);
  sphere (6371/x);
  popMatrix ();
  
  //Marte
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (Vm/VM));
  translate (135.6,0,0);
  fill (204,103,0);
  sphere (3390/x);
  popMatrix ();
  
  //Júpiter
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VJ/VM));
  translate (265.6,0,0);
  fill (204,153,102);
  sphere (69911/x);
  popMatrix ();
  
  //Saturno
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VS/VM));
  translate (376,0,0);
  fill (204,204,153);
  sphere (58232/x);
  popMatrix ();
  
  //Urano
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VU/VM));
  translate (664,0,0);
  fill (0,204,255);
  sphere (25362/x);
  popMatrix ();
  
  //Neptuno
  pushMatrix ();
  noStroke ();
  rotateY (frameCount * -PI * v * (VN/VM));
  translate (990,0,0);
  fill (0,20,255);
  sphere (24622/x);
  popMatrix ();
  
  

}












No hay comentarios:

Publicar un comentario