Bombou por aí essa demo para testar IA. Houve variações com quadrado e octógono. Quando vi, achei um excelente desafio para fazer com Rust e ggez. Depois de muita p0rr@da consegui fazer e documentei tudo para você.
Depois de fazer, pedi para algumas IAs fazerem demo semelhante e todas erraram feio. Há muitos detalhes que só um programador humano consegue resolver.
Este código demonstra uma simulação física simples utilizando a biblioteca gráfica ggez
em Rust. Um octógono gira continuamente enquanto uma bola quica em suas bordas, com detecção de colisão e física básica. O código demonstra conceitos de transformações geométricas, vetores e renderização 2D (tudo matemática de ensino médio, mas não é mole não!).
A documentação está em comentários dentro do código-fonte.
octogono
: Objeto gráfico do octógonorotacao_octogono
: Ângulo atual de rotação (em radianos)bola
: Objeto da bola com físicaBola::update():
Aplica gravidade (980 pixels/s²) e atualiza a posição. Permite quiques a cada 0.5 segundos.
Bola::verificar_colisao_ajustar():
Detecta colisões usando projeção vetorial. Calcula o ponto mais próximo nas arestas do octógono e ajusta a posição/velocidade da bola.
Estado::update():
Atualiza a rotação do octógono (1 radiano/segundo) e transforma seus vértices usando trigonometria.
A rotação do octógono é calculada para cada vértice usando:
let rot_x = ponto.x * cos(θ) - ponto.y * sin(θ);
let rot_y = ponto.x * sin(θ) + ponto.y * cos(θ);
θ
: Ângulo de rotação acumuladocos
/sin
: Funções trigonométricas para rotação 2DEventHandler
)Se você quiser ver uma demonstração que eu fiz com ggez
**abra o projeto ferris_hunter
.
Passos
# Clone o projeto (ou crie os arquivos manualmente)
git clone [URL_DO_REPOSITORIO]
# Entre no diretório
cd projeto
# Execute (o Cargo cuidará das dependências)
cargo run --release