Birden Fazla Kuvvet Nasıl Çalışır? (Force Accumulation)
Gerçek dünyada bir nesneye aynı anda birden fazla kuvvet etki eder. Bir yaprak düşerken hem yerçekimi aşağı çeker, hem rüzgar yana iter, hem de hava direnci yavaşlatır.
Peki birden fazla kuvveti nasıl hesaplarız? Cevap basit: TOPLAMA!
Vektör Toplama (Vector Addition) Nasıl Çalışır?
Vektörler ok gibidir: yönleri ve uzunlukları (büyüklükleri) vardır. İki vektörü toplamak için birinin ucuna diğerini koyarız:
Sayısal Örnek
// Yerçekimi: sadece aşağı (y pozitif = aşağı)
let gravity = createVector(0, 0.1);
// Rüzgar: sadece sağa (x pozitif = sağ)
let wind = createVector(0.05, 0);
// Net kuvvet = yerçekimi + rüzgar
// x: 0 + 0.05 = 0.05
// y: 0.1 + 0 = 0.1
// Sonuç: (0.05, 0.1) → sağ-aşağı yönde
💡 Neden Toplama?
Fizikteki süperpozisyon ilkesi der ki: Birden fazla kuvvet bir cisme etki ederse, sanki tek bir kuvvet (toplam kuvvet) etki ediyormuş gibi davranır.
applyForce() Fonksiyonu Detaylı
Önceki bölümde gördüğümüz applyForce() fonksiyonu
kuvvet biriktirmenin anahtarıdır:
applyForce(force) {
// Kuvveti ivmeye EKLE (üzerine yazma!)
this.acceleration.add(force);
}
Neden add() Kullanıyoruz?
Eğer this.acceleration = force yazsaydık, her yeni kuvvet
öncekinin üzerine yazardı. Ama add() kullanarak kuvvetleri
biriktiriyoruz.
// Her frame'de:
mover.applyForce(gravity); // ivme = (0, 0.1)
mover.applyForce(wind); // ivme = (0, 0.1) + (0.05, 0) = (0.05, 0.1)
mover.applyForce(friction); // ivme = (0.05, 0.1) + sürtünme
// update() sonunda:
this.acceleration.mult(0); // ivme sıfırlanır, bir sonraki frame için hazır
⚠️ Sıfırlama Çok Önemli!
Her frame sonunda ivmeyi sıfırlamayı unutmayın! Aksi halde kuvvetler sürekli birikir ve nesne kontrolden çıkar.
Mantık: İvme "şu anki kuvvetlerin etkisi"dir. Her frame'de kuvvetler yeniden hesaplanır, bu yüzden ivme de sıfırdan başlar.
Örnek: Yerçekimi + Rüzgar
Şimdi iki kuvveti bir arada görelim. Top hem aşağı düşecek (yerçekimi) hem de yatay hareket edecek (rüzgar).
Önemli Noktalar:
applyForce() onları toplar.
🔬 Deneyin:
-
Satır 12: Rüzgarı
createVector(-0.1, 0)yapın. Beklenti: Top sola doğru itilir -
Satır 11: Yerçekimini
createVector(0, -0.1)yapın. Beklenti: Top yukarı "düşer"! (ters yerçekimi) -
Yeni kuvvet:
let push = createVector(0, -0.3);ekleyin ve uygulayın. Beklenti: Top havada kalır veya yükselir (yukarı itme)
Örnek: Mouse ile Rüzgar Kontrolü
Etkileşimli bir örnek yapalım: mouse'a basıldığında rüzgar essin!
Yeni Kavramlar:
true, değilse false.
🔬 Deneyin:
- Canvas'a tıklayıp basılı tutun. Rüzgar etkisini görün.
-
Rüzgar yönünü mouse konumuna göre değiştirin:
Beklenti: Mouse sağdaysa sağa, soldaysa sola rüzgarlet wind = createVector((mouseX - width/2) * 0.001, 0);
Birden Fazla Nesne
Mover sınıfımızın güzelliği burada ortaya çıkıyor: dizi (array) kullanarak istediğimiz kadar nesne oluşturabiliriz!
Dizi Kullanımı:
🔬 Deneyin:
-
Satır 6:
i < 20yaparak 20 top oluşturun. -
Her topa farklı kütle verin (sonraki konumuzun habercisi!):
new Mover(random(width), random(height/2), random(0.5, 3))
📝 Bu Bölümün Özeti
- Kuvvet Biriktirme: Birden fazla kuvvet vektörel olarak toplanır
- applyForce(): add() ile ivmeye kuvvet ekler
- Sıfırlama: Her frame sonunda ivme sıfırlanmalı
- İnteraktivite: mouseIsPressed ile dinamik kuvvetler
- Diziler: Birden fazla nesneyi yönetmek için array kullan