Se você já usou a versão desktop do planetário virtual Stellarium, ou se já assistiu alguma sessão de planetário digital que utilizou o aplicativo, sabe que suas simulações além de envolventes possuem um imenso potencial como recurso visual para aulas e apresentações.
Mas essa experiência pode ficar ainda mais envolvente e fluida com o uso de scripts, automatizando funções e mudanças de parâmetros do aplicativo. É possível criar apresentações que são verdadeiros filmes, com transições suaves e com uma dinâmica quase vertiginosa que prende a atenção da audiência.
Para exemplificar o poder dos scripts do Stellarium, vamos juntos criar um tour pelos planetas do Sistema Solar, demonstrando algumas das principais classes de objetos acessíveis através de scripts. Vamos colocar a mão na massa?
Com a Mão na Massa!
Antes de tudo, você vai precisar ter o Stellarium instalado em sua máquina. Ele é gratuito e está disponível para os principais sistemas operacionais de desktops e laptops atuais (Linux, MacOS e Windows). Para baixar os arquivos de instalação, acesse: http://stellarium.org
Assumindo que você tenha o aplicativo instalado e tenha se familiarizado com sua interface gráfica, é hora de acessar o console para escrevermos os scripts. Use a tecla de função F12 para acessar diretamente o Script Console.
A partir de agora escreveremos um roteiro para nossa sessão cinema interplanetário. Precisaremos acessar funções que estão agrupadas em diferentes classes. Algumas comandam a exibição de símbolos e linhas na tela. Outras comandam os movimentos do telescópio. Outros são funções básicas do aplicativo, comandando, por exemplo, a passagem do tempo, os modos de visualização ou a seleção de objetos.
Conhecendo algumas Classes
- core – Funções básicas.
- LandscapeMgr – Gerenciamento de visualização da paisagem.
- StelMovementMgr – Gerenciamento de movimento.
- GridLinesMgr – Gerenciamento de linhas de grade.
É possível consultar a documentação detalhada dessas e de outras classes acessando: http://stellarium.org/doc/head/scripting.html
Loops
É possível criar iterações dentro dos scripts. A sintaxe de um loop for é:
for (i=valor inicial; i<valor final; i++) { comandos }
Inicializando a apresentação
Queremos inicialmente configurar o Stellarium para a data atual e para a localização do observador, além de habilitar uma visualização em disco e sem a atmosfera. Esses parâmetros são ajustáveis atrav´s de funções das classes core e LandscapeMgr.
- Ajustar data inicial.
- Ajustar localização do observador.
- Habilitar visualização em disco.
- Desabilitar a atmosfera.
- Desabilitar o cenário (landscape).
Adicionaremos antes duas variáveis para controlar a duração (em segundos) das pausas estabelecidas nas funções core.wait().
// Stellarium - Tour pelo Sistema Solar var pausa = 3; // variavel criada para a funcao core.wait() var pausaLonga = 6; //ajuste de data e localizacao core.setDate("now"); core.setObserverLocation(-45.9, -23.2, 650, 3, "São José dos Campos", "Terra"); core.setDiskViewport(true); //ajuste da paisagem LandscapeMgr.setFlagAtmosphere(false); core.wait(pausa); LandscapeMgr.setFlagLandscape(false);
Primeiro Movimentos
Agora comandaremos os primeiros movimentos de nossa apresentação. Queremos que a visualização corresponda a de um telescópio em montagem equatorial, evitando que o campo gire sempre que o objeto cruzar o meridiano local, como ocorre em telescópios em montagem altazimutal. Isso, felizmente, também pode ser configurado.
Queremos inicialmente um campo amplo, olhando para o zênite e cobrindo 180º do céu.
- Configurar montagem equatorial.
- Desfazer qualquer seleção de objeto pré-existente.
- Olhar para o zênite.
- Ajustar o zoom para 180º.
StelMovementMgr.setEquatorialMount(true); StelMovementMgr.deselection(); StelMovementMgr.lookZenith(pausa); core.wait(pausa); StelMovementMgr.zoomTo(180, pausa); core.wait(pausa);
Criando o Roteiro da Viagem.
Nossos destinos serão incluídos em uma lista que será acessada dentro de nosso script.
var planets = ["Sun", "Mercury", "Venus", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
Em seguida vamos apontar para o primeiro objeto, inciando um loop for para varrer toda a lista, aproximando a visualização, aguardando por um tempo e em seguida afastando a visualização e passando ao próximo objeto.
for (i=0; i<planets.length; i++) { objName = planets[i]; core.selectObjectByName(objName); core.output(objName); //exibe o nome do objeto no console StelMovementMgr.autoZoomIn(pausa); core.wait(pausaLonga); StelMovementMgr.zoomTo(40,8); // zoom out core.wait(pausaLonga); }
Já temos até aqui, um tour completo pelos maiores corpos do Sistema Solar. Você pode digitar ou colar cada um desses blocos no Script Console do seu Stellarium e executar o script para ver a magia acontecer.
É um script curto e fácil de compreender, que pode servir de ponto de partida para suas ideias mais complexas. Por sinal, talvez você tenha sentido falta de um planeta, não? Que tal criar um passo final no seu script para levar o observador até a Lua e exibir a Terra?
Faixa Bônus
O próximo bloco de código é um bônus em nosso passeio. Você consegue identificar o que ele faz e integrá-lo ao seu script?
//Jupiter var planet = "Jupiter" core.setDate("now") LandscapeMgr.setFlagLandscape(false); LandscapeMgr.setFlagAtmosphere(false); core.output(planet); core.moveToObject(planet , 3); core.selectObjectByName(planet) StelMovementMgr.autoZoomIn(3); core.output(planet); core.wait(3); StelMovementMgr.zoomTo(0.05, 3); //core.wait(pausaLonga); for (i=0; i<360; i++) { var data = core.getDate() core.output(data) core.setDate("data +0.2hours"); core.wait(0.02); }