"""Cálculo estimado da fração de tempo ao longo de um longo período (10 anos netunianos) em que um conjunto de planetas fica visível a partir da Terra. Utilizamos a aproximação de movimento circular uniforme para as órbitas planetárias, que é suficiente para essa estimativa."""import math, random#Períodos e raios orbitais dos planetas. A Terra é sempre o primeiro elemento:T = [1.0, 0.2, 0.6, 1.9, 11.9, 29.5, 84.0, 164.8] #anosR = [150, 58, 108, 228, 778, 1443, 2872, 4495] #milhões de kmdef fracao_planetas(T, R): N =len(T) ang0 = [random.random()*2*math.pi for _ inrange(N)] #planetas iniciam em direções aleatórias P = [0]*N #inicializa array de vetores de posição dos planetas com a origem no Sol anos =165*10#10 anos netunianos fm =12#Número de intervalos temporais em que o ano é dividido para discretização da amostragem temporal. t_visivel =0#tempo em que os planetas estarão acima do horizonte noturno de observação da Terra tsv_min = anos*fm #intervalo de tempo mínimo em que todos os planetas estão visíveis tsv_max =0#intervalo de tempo máximo em que todos os planetas estão visíveis tsn_min = anos*fm #intervalo de tempo mínimo em que pelo menos um planeta não é visível tsn_max =0#intervalo de tempo máximo em que pelo menos um planeta não é visível tsv, tsn =0, 0# contadores para tsv e tsn min e max. t_ant =False#Indicador se todos os planetas estavam visíveis no passo temporal anterior.for t inrange(anos*fm): #tempo em ano/fmfor i inrange(N): #posições dos planetas em relação ao Sol wi =2*math.pi/T[i] ang = ang0[i] + wi*t/fm P[i] = [R[i]*math.cos(ang), R[i]*math.sin(ang)] Ps = [-P[0][0], -P[0][1]] #vetor Terra -> Sol amin = math.pi amax =0for i inrange(2, N): #Começa em 2 para pular a Terra e o primeiro planeta ang = angulo(P[0], P[1], P[i]) amax =max(amax, ang) amin =min(amin, ang) angS = angulo(P[0], P[1], Ps) #ângulo do Sol if( ((angS < amin) or (angS > amax)) and#o Sol está fora do leque angular dos planetas ((amax - amin) < math.pi) #todos os planetas na mesma metade do plano com a Terra na origem ): t_visivel +=1if (t_ant): tsv +=1else: tsv =1 tsv_min =min(tsv_min, tsv) tsv_max =max(tsv_max, tsv) t_ant =Trueelse:if (not t_ant): tsn +=1else: tsn =1 tsn_min =min(tsn_min, tsn) tsn_max =max(tsn_max, tsn) t_ant =False fracao = t_visivel/(anos*fm)return [str(round(fracao*365.26)),str(round(tsv_min)),str(round(tsv_max)),str(round(tsn_min)),str(round(tsn_max)) ]def angulo(A, B, C): #ângulo entre os vetores AB e AC#calcula os vetores AB e AC AB = (B[0] - A[0], B[1] - A[1]) AC = (C[0] - A[0], C[1] - A[1])#produto vetorial e produto escalar vet = AB[0]*AC[1] - AB[1]*AC[0] esc = AB[0]*AC[0] + AB[1]*AC[1] return math.atan2(vet, esc)T1, R1 = T, R #todos os planetasT2, R2 = T[0:6], R[0:6] #exclusão de Urano e NetunoT3, R3 = T[0:1] + T[2:6], R[0:1] + R[2:6] #exclusão de Mercúrio, Urano e NetunoT4, R4 = T[0:1] + T[2:5], R[0:1] + R[2:5] #exclusão de Mercúrio, Saturno, Urano e Netuno[fracao1, tsv_min1, tsv_max1, tsn_min1, tsn_max1] = fracao_planetas(T1, R1)[fracao2, tsv_min2, tsv_max2, tsn_min2, tsn_max2] = fracao_planetas(T2, R2)[fracao3, tsv_min3, tsv_max3, tsn_min3, tsn_max3] = fracao_planetas(T3, R3)[fracao4, tsv_min4, tsv_max4, tsn_min4, tsn_max4] = fracao_planetas(T4, R4)print(fracao1, tsv_min1, tsv_max1, tsn_min1, tsn_max1)
8 1 6 1 652
Carnaval dos planetas como uma paródia ao “alinhamento” dos planetas. [Imagem gerada com Qwen2.5]
Hoje, 28/02/2025, está sendo alardeada nas redes sociais, jornais e nos mais diversos canais de comunicação uma condição muito especial de observação do céu que está sendo chamada de alinhamento dos planetas. Entretanto, existe muita imprecisão e até mesmo informações erradas em todas essas notícias. Vamos tratar de algumas delas.
Os planetas estarão mesmo alinhados?
Sim, como sempre estiveram. Como os planetas do Sistema Solar foram formados a partir do mesmo disco de acreção estelar, que evoluiu na forma de um disco achatado (semelhante à estrutura da própria Via Láctea), todos eles orbitam o Sol aproximadamente no mesmo plano. Isso significa que a Terra, estando nesse plano, faz com que vejamos os planetas sempre alinhados. Ou seja, não existe nenhum alinhamento especial ocorrendo, pois essa é uma condição perene dos planetas. Todos percorrem o céu aproximadamente ao longo do mesmo arco, cuja principal referência é o arco percorrido pelo Sol ao longo do ano, chamado de eclíptica. Inclusive, localizar a eclíptica no céu é um dos métodos que podemos usar para localizar os planetas e distingui-los dentre as estrelas.
Os planetas estarão todos ao mesmo tempo no céu noturno?
Tecnicamente, sim. Mas o céu é grande. A rigor, metade do Universo está voltada para nós ao mesmo tempo no céu a todo instante, e a outra metade está acessível para os australianos, por exemplo. Somemos a isso o fato de os planetas possuírem períodos orbitais diferentes, o que faz com que a quantidade de planetas visíveis mude constantemente ao longo dos anos. Incluímos aqui uma simulação simplificada, mas suficiente para nossos objetivos, que nos mostra que a condição mais rara de termos todos os planetas ao mesmo tempo no céu noturno ocorre, em média1, em 8 dias por ano. Parece pouco, mas compare com outros fenômenos interessantes como a ocorrência de um eclipse solar total na mesma região do planeta (algumas dezenas de minutos a cada 300 ou 400 anos) ou o trânsito de Vênus pelo Sol (algumas horas a cada 240 anos). Mesmo os eclipses solares parciais com frequência de alguns anos podem ser mais raros do que esse “alinhamento” completo, ainda mais um que ocorra no momento do pôr do Sol, cuja beleza ímpar pudemos apreciar em nossa região em outubro de 2024 (e que foi bem menos anunciado que o “alinhamento” de hoje). Um outro fator muito importante que precisamos considerar é que dos sete planetas, dois (Urano e Netuno) são somente visíveis com telescópios. E mesmo usando telescópios comerciais, é necessário conhecimento e habilidade para encontrar esses planetas no céu, pois mesmo ampliações de centenas de vezes não permitem destacá-los das estrelas pálidas. Então, se excluirmos Urano e Netuno (que não vemos a olho nu), temos 40 dias por ano, em média, com todos os planetas visíveis simultaneamente no céu noturno.
Veremos todos os planetas visíveis de forma mais clara neste “alinhamento”?
De forma alguma. Neste tal alinhamento, Mercúrio e Saturno estarão muito próximos do Sol, dificultando muito a sua visualização. Aliás, esse sempre é o caso de Mercúrio devido à sua maior proximidade do Sol. Vênus e Júpiter também não estarão na sua melhor condição (que é próxima à máxima elongação e em oposição, respectivamente).
A minha localização no planeta vai influenciar o que conseguirei ver?
Com certeza. Para regiões mais distantes do equador, o arco da eclíptica (que é o caminho do Sol e dos planetas ao longo dos anos) fica mais próximo do horizonte, podendo dar a sensação de um maior alinhamento dos planetas justamente devido à referência do relevo ao longo do horizonte e pela maior comodidade de visualização por não precisarmos ficar com o pescoço tão dobrado para o alto. No verão dos respectivos hemisférios, a eclíptica está ainda mais próxima do horizonte durante o período noturno. Além disso, essa maior inclinação da eclíptica nas altas latitudes (norte ou sul) faz com que a duração da alvorada e do crepúsculo solar seja maior nessas localidades, dando mais tempo para se tentar apreciar os planetas próximos ao Sol, como é sempre o caso de Mercúrio.
E se eu perder a oportunidade de ver o “alinhamento” hoje?
Não se preocupe. Amanhã será bem parecido. Na verdade, os planetas vão “foliar” até quarta-feira de cinzas (brincadeira, claro). Como dito anteriormente, a condição de visualização simultânea dos planetas pode durar vários dias. Além disso, os planetas que realmente geram bons espetáculos a olho nu são Vênus, Júpiter, Marte e Saturno, que ocorrem simultaneamente no céu noturno ao longo de 75 dias por ano em média. Se formos ainda mais restritivos e considerarmos apenas Vênus, Júpiter e Marte, essa condição ocorre por cerca de 144 dias por ano.
Como faço para não ser ludibriado(a) por notícias que tratam planetas como confetes?
Procure se informar com as páginas de instituições acadêmicas do Brasil e do exterior e use bons softwares de visualização do céu. Um dos melhores e de código aberto é o Stellarium, disponível para tudo que é sistema operacional.
Entendendo o código Python da simulação do período de visibilidade dos planetas
Clique para abrir
{{< contents a-cell >}}
O código Python desenvolvido por nós realiza uma simulação simplificada para estimar a fração do tempo em que um grupo de planetas pode ser observado no céu noturno da Terra. Ele simplifica a complexidade real do movimento planetário para oferecer uma estimativa útil para entender a frequência relativa de conjuntos planetários visíveis.
O código calcula, para diferentes conjuntos de planetas, quantos dias por ano, em média, é possível vê-los simultaneamente no céu noturno, a partir da perspectiva da Terra. A simulação abrange um longo período de tempo (10 anos netunianos, correspondendo ao período orbital do planeta mais distante e, portanto, o mais longo).
Como o código funciona?
Dados Iniciais:
T = [1.0, 0.2, 0.6, 1.9, 11.9, 29.5, 84.0, 164.8]: Esta lista define os períodos orbitais dos planetas em anos terrestres. A ordem começa com a Terra (período 1.0), seguida por Vênus, Mercúrio, Marte, Júpiter, Saturno, Urano e Netuno.
R = [150, 58, 108, 228, 778, 1443, 2872, 4495]: Esta lista contém os raios orbitais médios dos planetas em milhões de quilômetros, seguindo a mesma ordem da lista de períodos.
A Terra é incluída como o primeiro elemento em T e R para servir como ponto de referência nos cálculos de posição relativa dos outros planetas.
Função fracao_planetas(T, R):
Inicialização:
N = len(T): A variável N armazena o número de planetas a serem simulados, obtido do tamanho da lista T.
ang0 = [random.random()*2*math.pi for _ in range(N)]: Cria uma lista ang0 com ângulos iniciais aleatórios para cada planeta. Isso simula que os planetas podem começar em qualquer ponto de suas órbitas no início da simulação.
P = [0]*N: Inicializa a lista P que irá armazenar as posições (coordenadas x e y) de cada planeta em relação ao Sol (que é considerado a origem).
t_visivel = 0: Inicializa a variável t_visivel para contar os intervalos de tempo em que os planetas são considerados visíveis no céu noturno.
anos = 165*10: Define a duração total da simulação em 10 anos netunianos.
fm = 12: Define o número de subdivisões de tempo dentro de cada ano terrestre, controlando a precisão da simulação temporal.
Loop Temporal:
for t in range(anos*fm): Este loop itera ao longo do tempo total da simulação, em passos discretos definidos por fm.
Loop Planetário:
for i in range(N): Para cada passo de tempo, este loop itera sobre cada planeta.
wi = 2*math.pi/T[i]: Calcula a velocidade angular wi de cada planeta, baseada em seu período orbital T[i]. Assume-se movimento circular uniforme.
ang = ang0[i] + wi*t/fm: Calcula o ângulo orbital ang do planeta no tempo t, somando o ângulo inicial ang0[i] ao deslocamento angular desde o início da simulação.
P[i] = [R[i]*math.cos(ang), R[i]*math.sin(ang)]: Calcula as coordenadas (x, y) da posição do planeta P[i] em relação ao Sol, usando o raio orbital R[i] e o ângulo orbital ang.
Cálculo da Condição de Visibilidade Noturna:
Ps = [-P[0][0], -P[0][1]]: Calcula o vetor posição do Sol visto da Terra (Ps). Como P[0] é a posição da Terra em relação ao Sol, Ps é o vetor oposto.
amin = 0, amax = 0: Inicializa as variáveis amin e amax para rastrear o ângulo mínimo e máximo formado entre a Terra e o planeta de referência (1° planeta da lista depois da Terra) e os demais planetas.
Loop para os planetas visíveis (excluindo Terra e planeta de referência):
for i in range(2, N): Este loop itera sobre os planetas a partir de Mercúrio (índice 2), pulando a Terra e o planeta de referência.
ang = angulo(P[0], P[1], P[i]): Calcula o ângulo ang entre o vetor Terra-Planeta_referência e o vetor Terra-Planeta i usando a função angulo.
amax = max(amax, ang), amin = min(amin, ang): Atualiza amax e amin para manter o registro do maior e menor ângulo encontrado até agora.
angS = angulo(P[0], P[1], Ps): Calcula o ângulo angS entre o vetor Terra-Planeta_referência e o vetor Terra-Sol, usando novamente a função angulo.
Condição de Visibilidade:
if ((angS < amin) or (angS > amax)): Verifica se o ângulo do Sol (angS) está fora do intervalo angular definido pelos planetas (amin a amax). Se estiver fora, o Sol está “atrás” dos planetas, potencialmente permitindo a sua visibilidade noturna.
if ((amax - amin) < math.pi): Adicionalmente, verifica se o intervalo angular dos planetas (amax - amin) é menor que \(\pi\) radianos (180°). Isso garante que os planetas estejam agrupados na mesma metade do céu.
t_visivel += 1: Se ambas as condições forem satisfeitas, incrementa o contador t_visivel, indicando que neste intervalo de tempo os planetas são considerados visíveis no céu noturno.
Cálculo da Fração de Tempo Visível:
fracao = t_visivel/(anos*fm): Calcula a fração do tempo total em que os planetas foram considerados visíveis, dividindo o tempo visível acumulado t_visivel pelo tempo total da simulação (anos*fm).
return fracao: Retorna o valor da fração calculada.
Função angulo(A, B, C):
Esta função calcula o ângulo entre os vetores AB e AC, onde A, B e C são pontos definidos por suas coordenadas.
Calcula os vetores AB e AC subtraindo as coordenadas do ponto A dos pontos B e C, respectivamente.
Calcula o módulo do produto vetorial AB e AC (vet que corresponde a \(|AB||AC|\textnormal{sen}\theta\)) e o produto escalar (esc que corresponde a \(|AB||AC|\cos\theta\)).
Retorna o ângulo entre os vetores usando math.atan2(vet, esc), que fornece o ângulo correto no intervalo \((-\pi,\pi]\) radianos.
Cálculo e Exibição dos Resultados:
T1, R1 = T, R, T2, R2 = T[0:6], R[0:6], T3, R3 = T[0:1] + T[2:6], R[0:1] + R[2:6], T4, R4 = T[0:1] + T[2:5], R[0:1] + R[2:5]: Define diferentes conjuntos de listas de períodos e raios para simular a visibilidade com diferentes combinações de planetas (todos, excluindo Urano e Netuno, excluindo Mercúrio, Urano e Netuno, excluindo Mercúrio, Saturno, Urano e Netuno).
fracao1 = str(round(fracao_planetas(T1, R1)*365.26)), etc.: Para cada conjunto de planetas, chama a função fracao_planetas para calcular a fração de tempo visível, multiplica por 365.26 para converter para dias por ano, arredonda o resultado para o inteiro mais próximo, e converte para string para ser inserido no texto do artigo.
Simplificações e Considerações
Órbitas Circulares e Coplanares: A simulação simplifica as órbitas planetárias para círculos perfeitos e assume que todos os planetas orbitam no mesmo plano, o que não é totalmente preciso, mas suficiente para nossas estimativas. As órbitas reais são levemente elípticas e possuem pequenas inclinações relativas.
Condição de Visibilidade Aproximada: A condição para determinar a visibilidade noturna é uma aproximação e não considera outros fatores que afetam a visibilidade real, como o brilho dos planetas, a condição de luminosidade noturna do céu, ou as fases dos planetas.
Natureza Estatística da Simulação: A simulação utiliza posições iniciais aleatórias para os planetas e executa a simulação por um longo período para obter uma média estatística da fração de tempo visível. Os resultados devem ser interpretados como estimativas médias e podem variar ligeiramente em execuções repetidas devido à aleatoriedade.
Notas de rodapé
Essa é uma simulação realizada ao longo de 1600 anos. Então, em determinadas épocas (ou décadas), esse período de visualização pode ser significativamente maior ou menor. Mas o valor médio é esse mesmo.↩︎