Skip to content

dbseitenfus/particle-collision-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Particle Collision System

Simulação de colisão de partículas em tempo real, construída com Python e Pygame. O sistema simula partículas simultaneamente, detectando colisões entre si e com as bordas da janela de forma eficiente através de uma uniform grid de particionamento espacial.

demo.mov
Screen.Recording.2024-06-16.at.13.22.353.mov

Funcionalidades

  • Simulação de 7.000 partículas em tempo real
  • Colisões entre partículas com reflexão
  • Reflexão nas bordas da janela
  • Detecção de colisão otimizada com uniform grid (particionamento espacial)
  • Prevenção de sobreposição entre partículas

Como Funciona

Uniform Grid (Particionamento Espacial)

A janela de 700×700 px é dividida em células de 10×10 px, formando uma grade de 70×70 células. Cada partícula é alocada na célula correspondente à sua posição. A detecção de colisão ocorre apenas entre partículas da mesma célula, reduzindo a complexidade de O(n²) para próximo de O(n).

Física das Colisões

Ao detectar colisão entre duas partículas, o sistema:

  1. Calcula o vetor normal (linha entre os centros)
  2. Calcula o vetor tangente (perpendicular ao normal)
  3. Projeta as velocidades nesses eixos
  4. Troca as componentes normais (colisão elástica)
  5. Reposiciona as partículas para evitar sobreposição

Loop de Simulação (por frame)

Limpar grid → Desenhar partículas → Atualizar posições →
Alocar na grid → Detectar colisões → Refletir nas bordas

Estrutura do Projeto

particle-collision-system/
├── main.py               # Ponto de entrada, loop principal e criação das partículas
├── Particle.py           # Classe Particle com física e detecção de colisão
└── particles_manager.py  # Classe ParticlesManager com a uniform grid

Instalação e Execução

Pré-requisitos

Instalação

pip install pygame

Executando

python main.py

Controles: ESC ou fechar a janela para encerrar.


Configuração

Os principais parâmetros estão em main.py:

Parâmetro Valor padrão Descrição
WIDTH, HEIGHT 700, 700 Dimensões da janela
grid_size 10 Tamanho da célula da grade (px)
Número de partículas 7000 Quantidade total de partículas
speed 3 Velocidade de movimento
radius 1 Raio das partículas
FPS 30 Taxa de quadros alvo

About

Este projeto implementa um sistema de simulação de colisão de partículas usando a biblioteca Pygame.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages