Simulação do sistema solar simplificado utilizando openGL.

Segue abaixo os dados colhidos via internet e suas simplificações:

img1.png
Figure 1. Imagem tabela de valores

Significado das colunas e explicação dos valores:

  1. Coluna B mostra os valores para raio equatorial dos corpos celestes em km.

  2. 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.

  3. Coluna E mostra a velocidade em km/s em média do planeta na órbita.

  4. Coluna F representa os valores da coluna E divididos por 10 para uma melhor representação.

  5. 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.

  6. 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.

  7. 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).

  8. 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).

  9. Coluna O representa o lado B calculado através da modificação da equação da excentricidade para b=sqrt(a2(-e2+1)).

  10. 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.

  11. Coluna Q mostra o tempo em dias para cada corpo dar uma volta em torno de si em dias.

  12. 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
Figure 2. Imagem ilustrando o Periélio e o Afélio
img2.png
Figure 3. Imagem ilustrando os diâmetros da órbita, lado A e B

Breve explicação do código (orbitas, translação e rotação)

  1. 8 dos 9 planetas somente orbitam em função de X e Y, com exceção de plutão.

  2. 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.

  3. Foram usados valores aleatórios de velocidade de órbita para as luas exceto para a lua da terra.

  4. A rotação dos planetas é aplicada na função glRotated e giram em relação ao eixo Z.

Código Órbita(exemplo Netuno)
//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();
Código Translação e rotação(exemplo Netuno)
//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

  1. Scroll do mouse ou 3 e 4 para zoom in e zoom out respectivamente.

  2. z, Z, y, Y, x, X, modificam as rotações em torno dos eixos.

  3. As setas ou clicar e arrastar movimentam a tela por x, y.

  4. Page up coloca a tela em fullScreen.

Curiosidade

  1. 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
Figure 4. Gif da animação