Vou assumir que já sabem um pouco de Python e passar à frente as partes específicas da linguagem (que acabam por ser muito poucas

Em primeiro lugar têm de ter o VPython instalado no vosso computador.
Windows Users:
Podem ir ao site do VPython e fazer download da última package estável, mesmo que ainda n tenham o Python instalado. (Ela inclui o
IDLE, o modulo visual e outras coisas... )
Linux Users:
A partida já têm o Python


Vamos então começar por uma simples simulação de uma bola em queda livre que ressalta ao tocar no chão e tem um coeficiente de restituição igual a 1.
Em primeiro lugar, importamos tudo do módulo visual:
- Código: Seleccionar Todos
from visual import *
Depois definimos umas variáveis que nos vão ser úteis

- Código: Seleccionar Todos
g = 9.8
dt = 0.01
Agora criamos dois objectos, um vai representar a bola que é, naturalmente, uma esfera. O chão vai ser uma caixa.
Os argumentos parecem-me bastante óbvios mas nada como dar aqui um saltinho para ficar a saber tudo sobre como
se inicializam e como interagem os objectos e janelas no VPython.
- Código: Seleccionar Todos
bola = sphere(pos=(0., 20., 0.), radius=2.0, color=color.red)
terra = box(pos=(0., -0.5, 0.), size=(20., 0.5, 20.), color=color.blue)
Neste momento estou a definir a variável vel associada ao objecto bola. Naturalmente vai representar a velocidade da bola.
O tipo de dados vector está definido em visual e dá bastante jeito, vejam na reference. Para além de ter várias operações
sobre vectores definidas, pode-se aceder às diferentes coordenadas com o nome x, y e z. Ex. bola.vel.y
- Código: Seleccionar Todos
bola.vel = vector(0.,0., 0.)
Aqui controlo a "janela" que tem como nome default "scene"
- Código: Seleccionar Todos
scene.autoscale=0
scene.center=(0,10,0)
scene.range=(25,25,25)
finalmente o ciclo de execução do programa:
- Código: Seleccionar Todos
while 1:
rate(100) # faz com que o programa execute 100 ciclos por segundo
# com dt= 0.01, temos "tempo real"
bola.pos = bola.pos + bola.vel*dt #esta ja todos conhecemos :)
if bola.pos.y < bola.radius: #condicao de colisao
bola.vel.y = -bola.vel.y
else:
bola.vel.y = bola.vel.y -g*dt
Finalmente, se vos parecer demasiado lento para tempo real, lembrem-se que é uma esfera de 4 metros de diâmetro a cair de 20 metros de altura

Comentários, correcções e perguntas são benvindas!