Uma simulação física interativa e visualmente precisa do Experimento da Fenda Dupla de Young, desenvolvida em Python. O projeto utiliza NumPy para renderizar padrões de interferência e difração de luz em tempo real, permitindo que estudantes e entusiastas explorem os princípios da óptica ondulatória.
- Simulação Física: Combina Difração de Fraunhofer (Fenda Única) com Interferência de Young (Fenda Dupla).
- Renderização em Tempo Real: Visualização instantânea do gráfico de intensidade.
-
Controles Interativos: Ajuste dinâmico de todos os parâmetros físicos via Sliders:
-
Comprimento de Onda (
$\lambda$ ): 380nm a 780nm (com cor RGB fiel). -
Distância entre Fendas (
$d$ ): Ajuste em micrômetros ($\mu m$ ). -
Largura da Fenda (
$a$ ): Controle do envelope de difração. -
Distância do Anteparo (
$L$ ): Afaste ou aproxime a tela de projeção.
-
Comprimento de Onda (
- Zoom Dinâmico: Altere o campo de visão para analisar detalhes centrais ou o padrão expandido.
- Python 3.10 ou superior.
-
Clone o repositório:
git clone https://github.com/LucasJSM/young-experiment.git
-
Crie e ative um ambiente virtual (Recomendado):
- Windows:
python -m venv .venv .venv\Scripts\activate
- Linux/Mac:
python3 -m venv .venv source .venv/bin/activate
- Windows:
-
Instale as dependências:
pip install -r requirements.txt
-
Execute a simulação:
python main.py
- Python 3: Linguagem base.
- Pygame CE: Motor gráfico para renderização da janela e primitivas visuais.
- NumPy: Cálculos vetoriais de alta performance para processar a intensidade de luz em milhares de pixels simultaneamente.
- Pygame GUI: Gerenciamento de interface (sliders).
O projeto segue o padrão arquitetural MVC (Model-View-Controller) para separar a lógica física da interface gráfica.
young-experiment/
├── main.py
└── src/
├── core/
│ └── app.py # Gerenciador do Game Loop (Controller)
├── model/
│ ├── experiment_state.py # Dataclass com parâmetros físicos
│ └── young_engine.py # Motor matemático
├── view/
│ ├── renderer.py # Desenha o gráfico e o padrão de luz
│ ├── ui_manager.py # Gerencia Sliders e Inputs
│ └── colors.py # Conversão do Comprimento de Onda -> RGB
└── utils/
└── math_conversions.py # Conversões de unidades
A intensidade
Onde:
-
$\lambda$ : Comprimento de onda. -
$L$ : Distância das fendas ao anteparo. -
$d$ : Distância entre os centros das fendas. -
$a$ : Largura de cada fenda.
- Luca Zoio
- Lucas Moura
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.