Zaawansowany symulator tunelu aerodynamicznego w 2D z edytorem kształtów, importem SVG i wizualizacją przepływu powietrza w czasie rzeczywistym.
- Ciągły strumień cząsteczek - stały przepływ z lewej strony ekranu
- Pole wektorowe - wizualizacja kierunków i prędkości przepływu
- Wizualizacja ciśnienia - mapa kolorów pokazująca rozkład ciśnienia (efekt Bernoulliego)
- Linie przepływu (streamlines) - ślady cząsteczek tworzące linie opływu
- Fizyka kolizji - realistyczne odbicia cząsteczek od przeszkód
- Kształty predefiniowane:
- Koło
- Prostokąt
- Trójkąt
- Profil lotniczy (NACA 0012)
- Rysowanie wielokątów dowolnego kształtu
- Minimum 3 punkty
- Wizualna podpowiedź podczas rysowania
- Edycja wierzchołków (przeciąganie)
- Przesuwanie całego kształtu
- Import SVG - wczytuj kształty z plików SVG (path, polygon, polyline)
- Export SVG - zapisuj swoje kształty do plików SVG
- Automatyczne skalowanie i centrowanie importowanych kształtów
- FPS - liczba klatek na sekundę
- Liczba cząsteczek - aktualna ilość cząsteczek w symulacji
- Współczynnik oporu (Cd) - aproksymacja oporu aerodynamicznego
- Siła nośna (Cl) - aproksymacja siły nośnej
- Prędkość przepływu (1-30 m/s)
- Gęstość cząsteczek (10-100)
- Włącz/wyłącz pole wektorowe
- Włącz/wyłącz wizualizację ciśnienia
- Włącz/wyłącz siatkę pomocniczą
Otwórz plik index.html w dowolnej nowoczesnej przeglądarce (Chrome, Firefox, Safari, Edge).
Nie wymaga instalacji ani serwera!
- Kliknij przycisk z wybranym kształtem (Koło, Prostokąt, Profil lotniczy, Trójkąt)
- Kształt pojawi się na środku ekranu
- Przeciągnij kształt myszką w wybrane miejsce
- Przeciągnij poszczególne punkty kontrolne aby zdeformować kształt
- Kliknij "Rysuj własny kształt"
- Klikaj na canvas aby dodawać punkty (min. 3)
- Kliknij "Zakończ kształt" aby zapisać
- Lub "Anuluj" aby odrzucić
- Kliknij "Importuj SVG"
- Wybierz plik SVG z dysku
- Kształt zostanie automatycznie przeskalowany i wycentrowany
- Cząsteczki wpływają z lewej strony
- Obserwuj jak powietrze opływa przeszkodę
- Niebieskie obszary = niskie ciśnienie (szybszy przepływ)
- Czerwone obszary = wysokie ciśnienie (wolniejszy przepływ)
Kliknij "Eksportuj kształt" aby zapisać aktualny kształt jako plik SVG
-
Pole wektorowe (Flow Field)
- Siatka 25x25px
- Każda komórka ma wektor prędkości (vx, vy) i ciśnienie
- Kształty modyfikują pole wokół siebie
-
Strumienie cząsteczek
- Cząsteczki startują z lewej strony w równomiernych strumienia
- Każda cząsteczka podąża za wektorem przepływu
- Interpolacja prędkości z siatki (smoothing)
-
Kolizje
- Ray casting do detekcji punktu wewnątrz wielokąta
- Odbicie od najbliższego punktu na krawędzi
- Zachowanie pędu
-
Efekt Bernoulliego
- Większa prędkość = niższe ciśnienie
- Wizualizowane kolorem (niebieski/czerwony)
-
Współczynniki aerodynamiczne
- Całkowanie ciśnienia po powierzchni kształtu
- Cd (opór) - siła w kierunku przepływu
- Cl (siła nośna) - siła prostopadła do przepływu
- HTML5 Canvas - renderowanie grafiki 2D
- Vanilla JavaScript (ES6+) - logika symulacji
- CSS3 - interfejs użytkownika z gradientami
- DOMParser API - parsowanie SVG
simulator.js
├── WindTunnel (klasa główna)
│ ├── Inicjalizacja
│ │ ├── resizeCanvas() - responsywność
│ │ ├── initFlowField() - pole wektorowe
│ │ └── initParticleStreams() - strumienie cząsteczek
│ │
│ ├── Fizyka
│ │ ├── updateFlowField() - aktualizacja przepływu
│ │ ├── calculateFlowAroundShape() - wpływ kształtu
│ │ ├── updateParticles() - ruch cząsteczek
│ │ └── calculateForces() - siły aerodynamiczne
│ │
│ ├── Geometria
│ │ ├── isPointInShape() - ray casting
│ │ ├── getClosestPointOnShape() - kolizje
│ │ └── closestPointOnSegment() - geometria
│ │
│ ├── Rendering
│ │ ├── drawGrid() - siatka
│ │ ├── drawFlowField() - wektory
│ │ ├── drawPressureField() - ciśnienie
│ │ ├── drawParticles() - cząsteczki + ślady
│ │ ├── drawShape() - kształt + punkty kontrolne
│ │ └── drawEditor() - tryb rysowania
│ │
│ ├── Kształty
│ │ ├── addCircle() - koło (32 segmenty)
│ │ ├── addRectangle() - prostokąt
│ │ ├── addTriangle() - trójkąt
│ │ └── addAirfoil() - profil NACA 0012
│ │
│ ├── Edytor
│ │ ├── startDrawingMode() - włącz edytor
│ │ ├── addDrawingPoint() - dodaj punkt
│ │ ├── finishDrawing() - zapisz kształt
│ │ └── cancelDrawing() - anuluj
│ │
│ └── SVG
│ ├── importSVG() - import pliku
│ ├── parseSVGPath() - parsuj <path>
│ ├── parseSVGPolygon() - parsuj <polygon>
│ ├── normalizePoints() - skaluj i centruj
│ └── exportShape() - eksport do SVG
- Nauka aerodynamiki i mechaniki płynów
- Wizualizacja efektu Bernoulliego
- Testowanie profili lotniczych
- Eksperymentowanie z kształtami aerodynamicznymi
- Zrozumienie linii przepływu (streamlines)
- Różne profile NACA
- Regulacja kąta natarcia
- Wizualizacja wirów (vorticity)
- Symulacja turbulencji
- Eksport animacji do GIF
- Więcej opcji wizualizacji (smoke, heat map)
- Porównanie wielu kształtów jednocześnie
Open source - używaj dowolnie!
Stworzony z pomocą Claude Code - AI assistant od Anthropic
Miłej zabawy z aerodynamiką!