Hareketin Temeli: Newton Yasaları
Fizik simülasyonları oluşturmanın temeli, Sir Isaac Newton'un 17. yüzyılda keşfettiği hareket yasalarını anlamaktan geçer. Bu yasalar, gerçek dünyada nesnelerin nasıl hareket ettiğini açıklar.
💡 Neden Newton?
p5.js'te bir daire çizip hareket ettirmek kolay. Ama gerçekçi görünmesi için fizik kurallarına ihtiyacımız var. Newton yasaları bize bu kuralları veriyor.
Newton'un 1. Yasası: Eylemsizlik (Inertia)
Bu Ne Demek?
Bir topun masanın üzerinde durduğunu düşünün. Siz itmedikçe top orada duracak. Şimdi topu yuvarladığınızı düşünün - sürtünme ve hava direnci olmasa, top sonsuza kadar yuvarlanmaya devam ederdi!
Koddaki Karşılığı
Eğer bir nesneye hiç kuvvet uygulamazsak (acceleration = 0),
hızı (velocity) sabit kalır:
// Kuvvet yoksa ivme sıfır
// İvme sıfırsa hız değişmez
// Hız değişmezse cisim aynı hızda devam eder
update() {
// acceleration zaten (0, 0) ise:
this.velocity.add(this.acceleration); // hız değişmez
this.position.add(this.velocity); // aynı hızla hareket
}
Newton'un 2. Yasası: F⃗ = m × a⃗ (Force = Mass × Acceleration)
Formülü Anlayalım
Bizim İçin Önemli Form:
Neden bu form? Çünkü simülasyonlarda kuvveti biliyoruz (yerçekimi, rüzgar vb.) ve ivmeyi hesaplamak istiyoruz. İvmeyi bulunca hareket formüllerimize ekleyebiliriz.
Gerçek Hayat Örneği
Aynı kuvvetle bir ping-pong topu ve bir bowling topu ittiğinizi düşünün:
- Ping-pong topu (küçük kütle) → Büyük ivme → Hızla uçar
- Bowling topu (büyük kütle) → Küçük ivme → Yavaş hareket eder
Newton'un 3. Yasası: Etki-Tepki (Action-Reaction)
Bu Ne Demek?
Duvara yumruk attığınızda, duvar da size aynı kuvvetle yumruk atar! (O yüzden eliniz acır 😅)
Roketler böyle çalışır: roket gazı aşağı iter, gaz da roketi yukarı iter.
🎮 Oyunlarda Kullanımı
Bu yasayı her zaman modellemeyeceğiz. Basit simülasyonlarda genellikle sadece bir tarafa etki eden kuvveti düşünürüz. İleri seviyede (çarpışma fiziği gibi) bu yasa önemli olur.
En Basit Örnek: Düşen Top
Newton yasalarını anladık. Şimdi en basit fizik simülasyonunu yapalım: yerçekimi etkisiyle düşen bir top.
Kodun Mantığı
- Topun konumu (position) ve hızı (velocity) var
- Her frame'de yerçekimi kuvveti uyguluyoruz
- Kuvvet → İvme → Hız değişimi → Konum değişimi
Satır Satır Açıklama:
position ve velocity vektörleri tanımlıyoruz.
Bunlar topun nerede olduğunu ve ne hızla hareket ettiğini tutar.
setup() fonksiyonu bir kez çalışır. Canvas oluşturuyoruz
ve topun başlangıç değerlerini ayarlıyoruz.
(0, 0.2) vektörü
x=0 (yatay yok), y=0.2 (aşağı doğru) demek.
*= -0.9).
0.9 çarpanı enerji kaybını simüle eder.
🔬 Deneyin:
-
Satır 13: Yerçekimini
createVector(0, 0.5)yapın. Beklenti: Top daha hızlı düşer (daha güçlü yerçekimi) -
Satır 13:
createVector(0.1, 0.2)yapın. Beklenti: Top hem aşağı hem sağa hareket eder -
Satır 22:
-0.9yerine-1.0yapın. Beklenti: Top enerji kaybetmeden seçer -
Satır 22:
-0.5yapın. Beklenti: Top çok az seçer (yüksek enerji kaybı)
Mover Sınıfı: Daha Düzenli Kod
Yukarıdaki kod çalışıyor ama birden fazla top istesek kod karmaşıklaşır.
Object-Oriented Programming (OOP) kullanarak bir
Mover sınıfı oluşturalım.
💡 Sınıf (Class) Nedir?
Sınıf, bir "şablon" gibidir. Örneğin Mover sınıfı "hareket eden nesne"
şablonudur. Bu şablondan istediğimiz kadar top oluşturabiliriz.
Mover Sınıfı Açıklaması:
this "bu nesne" demek.
a = F/m (şimdilik m=1).
⚠️ İvmeyi Neden Sıfırlıyoruz?
this.acceleration.mult(0) satırı çok önemli!
İvme, o anki kuvvetlerin toplamıdır. Her frame sonunda sıfırlamazsak,
kuvvetler sürekli birikir ve top kontrolden çıkar.
Düşünün: Yerçekimi her frame'de uygulanıyor. Sıfırlamazsak, her frame'de yerçekimi bir öncekinin üzerine eklenir!
🔬 Deneyin:
-
sketch.js Satır 8:
winddeğerinicreateVector(0.05, 0)yapın. Beklenti: Top sağa doğru rüzgarla itilir -
mover.js Satır 26:
mult(0)satırını silin veya yorum yapın. Beklenti: Top hızla kontrolden çıkar! (ivme birikiyor)
📝 Bu Bölümün Özeti
- 1. Yasa: Kuvvet yoksa hareket değişmez
- 2. Yasa: F = ma → a = F/m
- 3. Yasa: Her etkiye eşit-zıt tepki (şimdilik kullanmıyoruz)
- applyForce(): Kuvveti ivmeye çevirir
- İvme sıfırlama: Her frame sonunda ivmeyi sıfırla!