Bu proje, Verlet entegrasyonu kullanarak fizik tabanlı ip simülasyonu yapar. Kullanıcı etkileşimli olarak ipi hareket ettirebilir, yerçekimini ve sönümlemeyi ayarlayabilir.
- Verlet Entegrasyonu: Gerçekçi fizik simülasyonu için Verlet entegrasyonu kullanılır.
- İnteraktif Kullanım: Fare ile ip segmentlerini sürükle ve bırak.
- Gerçek Zamanlı Ayarlar: Yerçekimi, sönümleme, segment sayısı ve segment uzunluğu ayarları.
- Kamera Sistemi: Zoom (yakınlaş/uzaklaş), pan (kamera hareketi) özellikleri.
- Etkileşimli Arayüz: Kaydırma çubukları (slider) ve butonlarla kolay kontrol.
| Teknoloji | Versiyon | Açıklama |
|---|---|---|
| Python | 3.14 |
Ana programlama dili |
| Pygame | 2.6.1 |
2D grafikler, oyun döngüsü ve kullanıcı arayüzü |
rope_sim/
├── src/
│ ├── main.py # Ana giriş noktası ve oyun döngüsü
│ ├── requirements.txt # Bağımlılıklar (pygame==2.6.1)
│ ├── rope.py # Rope sınıfı (Verlet entegrasyonu)
│ ├── physics/
│ │ ├── __init__.py
│ │ ├── particle.py # Partikül (kütle) sınıfı
│ │ └── constraint.py # Constraint (mesafe kısıtlaması) sınıfı
│ └── gui/
│ ├── __init__.py
│ └── gui.py # Kullanıcı arayüzü sınıfları
└── venv/ # Python sanal ortamı
- Depoyu klonla
git clone <repourl>
cd rope_sim- Sanal ortam oluştur ve aktif et
python -m venv venv
source venv/bin/activate # macOS/Linux
# veya
venv\Scripts\activate # Windows- Bağımlılıkları yükle
cd src
pip install -r requirements.txtcd src
python main.py| Tuş | Fonksiyon |
|---|---|
SPACE |
Simülasyonu başlat/durdur |
R |
İpi sıfırla |
ESC |
Çıkış |
+ / Kp+ |
Yakınlaş |
- |
Uzaklaş |
Sürükle |
İp segmentlerini hareket ettir |
- Reset Rope: İpi başlangıç konumuna sıfırla
- Gravity Slider: Yerçekimi kuvveti (0.1 - 2.5)
- Damping Slider: Sönümleme katsayısı (0.85 - 1.0)
- Segments Slider: Segment sayısı (2 - 5000)
- Segment Length Slider: Her segmentin uzunluğu (15 - 187)
- Zoom +/-/Reset: Kamera yakınlaştırma kontrolü
Proje, fizik simülasyonu için Verlet entegrasyonu yöntemini kullanır:
v = (current_pos - old_pos) * damping
new_pos = current_pos + v + gravity * dt²
Bu yöntem, numerik stabilite sağlar ve ip gibi esnek yapıların gerçekçi görünmesine yardımcı olur.
-
Particle (Partikül)
- Kütle temsil eder
- Pozisyon, velocity, kütle bilgilerini tutar
is_fixed: Sabit nokta mı?is_being_dragged: Kullanıcı sürüklüyor mu?
-
Constraint (Kısıtlama)
- İki partikül arasındaki mesafeyi sabit tutar
- Stiffness (katılık) parametresiyle esneklik kontrolü
- Iteratif çözüm ile stabilite sağlar
-
Rope (İp)
- Parçacıklar ve kısıtlamaları birleştirir
update(): Fizik güncellemesidraw(): Ekran çizimidrag_particle(): Fare ile etkileşim
-
Camera (Kamera)
- Zoom ve pan işlemleri
- Dünya koordinatları ↔ Ekran koordinatları dönüşümü
Simülasyon ekranı şu bileşenleri içerir:
- Arka plan: Grid (ızgara) sistemi
- İp: Beyaz partiküller ve gri segmentler
- UI Paneli: Sağ üst köşede parametre ayarları
- Bilgi Paneli: Gerçek zamanlı simülasyon istatistikleri
Not: Proje, eğitim amaçlı bir fizik simülasyonudur. Pygame kütühanesi ile yazılmıştır.
Vibe Coding Notu: Bu proje, vibe coding ile yaklaşık 2 saatlik çalışma sonucunda geliştirilmiştir.