Simulação do sistema solar simplificado utilizando openGL.
Segue abaixo os dados colhidos via internet e suas simplificações:
![img1.png](img1.png)
Significado das colunas e explicação dos valores:
-
Coluna B mostra os valores para raio equatorial dos corpos celestes em km.
-
Coluna D mostra o diametro dos corpos divididos por 105. Nem todos os valores foram representados tais quais a tabela, visto que o sol teria um diâmetro 100 vezes maior que a da terra e alguns planetas o que dificultaria o visualização.
-
Coluna E mostra a velocidade em km/s em média do planeta na órbita.
-
Coluna F representa os valores da coluna E divididos por 10 para uma melhor representação.
-
Colunas G e H representam os valores de Afélio e Periélio em dimensões de 106(ver figura 2).
Afélio: trecho da órbita mis afastada do sol.
Periélio: trecho da órbita mais próxima do sol.
-
Colunas I e J representam as colunas G e H com uma simplificação matemática.
Para uma aproximação mais adequada a visualização os afélios e periélios por:
Mercúrio e Vênus por 18
Terra por 20
Marte por 25
Jupiter por 52
Saturno a Plutão por uma equação 10*c, onde c varia de 7 a 10.
-
Coluna M representa o lado A, que é metade do maior diâmetro da elipse, correspondendo a soma do periélio e afélio e dividido por 2 (ver representação imagem 3).
-
Coluna N mostra a excentricidade que representa uma relação entre os diâmetros dos raios de lado A e B(lado correspondente ao menor diâmetro). A formula da excentricidade é dada por e=sqrt(1- b2/a2).
-
Coluna O representa o lado B calculado através da modificação da equação da excentricidade para b=sqrt(a2(-e2+1)).
-
Coluna P representa o foco solar, ou seja, o local onde o sol está localizado que corresponde ao meio do diâmetro maior mais um deslocamento dado por lado A*excentricidade ou lado A menos periélio.
-
Coluna Q mostra o tempo em dias para cada corpo dar uma volta em torno de si em dias.
-
Coluna R mostra os inversamente proporcionais multiplicados por 40, visto que quanto maior o valor mais lento ele deve ser em sua rotação. Após isso todos os valores foram normalizados pelo valor da terra.
![img3.png](img3.png)
![img2.png](img2.png)
Breve explicação do código (orbitas, translação e rotação)
-
8 dos 9 planetas somente orbitam em função de X e Y, com exceção de plutão.
-
Foi convencionado que X seria o raio correspondente ao lado B(fator que multiplica o cosseno) e Y seria correspondente ao raio de lado A(fator que multiplica o seno), podemos observar porém que o raio de lado A varia com relação ao sol, de forma que lado A + dist. centro a posição solar para a parte positiva do seno corresponde ao Afélio, parte mais afastada do sol e lado A + dist. centro a posição solar para a parte negativa do seno corresponde ao Periélio. O fator que multiplica o a(0.5 no exemplo abaixo) corresponde a velocidade de translação do corpo celeste em órbita. A variável a sempre que a função ao qual o código faz parte é chamada é incrementada, fazendo com que haja variação dos valores.
-
Foram usados valores aleatórios de velocidade de órbita para as luas exceto para a lua da terra.
-
A rotação dos planetas é aplicada na função glRotated e giram em relação ao eixo Z.
//orbita netuno
glPushMatrix();
glBegin(GL_LINE_LOOP);
for (i = 0; i <= 100 ; i++) {
glVertex2f(50.04 * cos(2.0 * 3.14 * i / 100),
(0.5+50.03 * sin(2.0 * 3.14 * i / 100) ));
}
glEnd();
glPopMatrix();
//netuno translação
glPushMatrix();
//translacao
if(movimento ==1)
glTranslatef((50.04* cos(2.0 * 3.14 * a*0.5 / 100)),(0.5+50.03 * sin(2.0 * 3.14 * a*0.5 / 100)), 0);
//rotacao
glRotated(-60*a, 0, 0, 1);
glCallList(planetas[8]);
glPopMatrix();
Comandos
-
Scroll do mouse ou 3 e 4 para zoom in e zoom out respectivamente.
-
z, Z, y, Y, x, X, modificam as rotações em torno dos eixos.
-
As setas ou clicar e arrastar movimentam a tela por x, y.
-
Page up coloca a tela em fullScreen.
Curiosidade
-
Vênus e Urano giram em sentido contrário a todos os outros corpos do sistema solar, inclusive o sol.
Arquivos
Pack Texturas: Arquivo zip com todas as texturas utilizadas.
Makefile: Para compilar o arquivo fonte.
Arquivo Fonte: Arquivo com o código fonte em c.
png_texture: Arquivo utilizado no código fonte para carregar as texturas em png.
parametros: Arquivo ods contendo a tabela com as informações mostradas acima.
![anim.gif](anim.gif)