Kütle (Mass) Neden Önemli?

Şimdiye kadar kütleyi görmezden geldik (mass = 1 varsaydık). Ama gerçek dünyada kütle (mass) çok önemli!

Newton'un 2. yasasını hatırlayalım:

a⃗ = F⃗ / m
İvme (Acceleration) = Kuvvet (Force) / Kütle (Mass)

Bu formülden şunu anlıyoruz: Aynı kuvvet, farklı kütlelere farklı ivme verir.

💡 Örnek: Bowling Topu vs Ping-Pong Topu

Aynı kuvvetle (10N diyelim) iki farklı topu iterseniz:

  • Ping-pong topu (m=0.003 kg): a = 10 / 0.003 = 3333 m/s² 🚀
  • Bowling topu (m=7 kg): a = 10 / 7 = 1.4 m/s² 🐢

Ping-pong topu 2000 kat daha fazla ivmelenir!

applyForce() Fonksiyonunu Güncelleme

Mover sınıfımıza mass (kütle) ekleyelim ve applyForce() fonksiyonunu güncelleyelim:

class Mover {
  constructor(x, y, mass) {
    this.position = createVector(x, y);
    this.velocity = createVector(0, 0);
    this.acceleration = createVector(0, 0);
    this.mass = mass;  // Kütle eklendi!
  }

  applyForce(force) {
    // Newton'un 2. yasası: a = F / m
    // Kuvveti kütleye bölüyoruz!
    let f = p5.Vector.div(force, this.mass);
    this.acceleration.add(f);
  }
}

Neden p5.Vector.div() Kullanıyoruz?

⚠️ Çok Önemli: force'u Değiştirmemek!

force.div(this.mass) yazsaydık, orijinal force vektörünü değiştirirdik! Bu tehlikeli çünkü aynı force birden fazla nesneye uygulanabilir.

p5.Vector.div(force, this.mass) ise yeni bir vektör oluşturur, orijinal force'a dokunmaz.

// ❌ YANLIŞ - orijinal vektörü değiştirir!
applyForce(force) {
  force.div(this.mass);        // gravity değişti!
  this.acceleration.add(force);
}

// ✅ DOĞRU - yeni vektör oluşturur
applyForce(force) {
  let f = p5.Vector.div(force, this.mass);  // yeni vektör
  this.acceleration.add(f);
}

// Neden önemli?
let gravity = createVector(0, 0.2);

// Eğer yanlış yöntem kullanırsak:
mover1.applyForce(gravity);  // gravity artık (0, 0.1) oldu (mass=2 ise)
mover2.applyForce(gravity);  // mover2 yanlış gravity alıyor!

Örnek: Farklı Kütleler

Şimdi farklı kütlelere sahip topların nasıl davrandığını görelim. Aynı yerçekimi kuvveti, farklı hızlarda hareket yaratacak.

Kodun Açıklaması:

constructor
Artık mass parametresi alıyoruz. Çap da kütleye bağlı (mass * 16) - büyük kütle = büyük top.
applyForce
Kuvveti kütleye bölüyoruz: p5.Vector.div(force, this.mass). Ağır toplar daha az ivmelenir.
Rastgele kütle
random(0.5, 4) ile 0.5 ile 4 arasında kütle veriyoruz. Her top farklı boyutta ve ağırlıkta.

🔬 Deneyin:

  1. Gözlem: Tüm toplar aynı anda düşüyor mu? Evet! Yerçekiminde kütle fark etmez (Galileo'nun keşfi)
  2. Rüzgar ekleyin: mouseIsPressed ile rüzgar ekleyin. Hafif toplar daha çok etkilenir!
  3. Çok kütle: random(0.1, 10) yapın. Daha dramatik farklar görürsünüz

Gerçek Yerçekimi ve Kütle

İlginç bir şey fark ettiniz mi? Farklı kütleli toplar aynı hızda düşüyor! Bu, Galileo'nun ünlü deneyinin sonucu.

💡 Galileo'nun Keşfi

1589'da Galileo, Pisa Kulesi'nden farklı ağırlıkta topları bıraktı (efsaneye göre). Hepsi aynı anda yere düştü!

Neden? Yerçekimi kuvveti kütleyle orantılı (F = m × g), ama ivme de kütleyle ters orantılı (a = F / m). İkisi birbirini götürür!

Matematiksel İspat

// Yerçekimi kuvveti (gerçek fizik)
// F = m × g  (g = yerçekimi ivmesi = 9.8 m/s²)

// Newton'un 2. yasası
// a = F / m = (m × g) / m = g

// Kütle sadeleşiyor! İvme hep g'ye eşit.

Ama rüzgar gibi kuvvetlerde kütle önemli! Rüzgar kuvveti kütleyle orantılı değil, bu yüzden hafif nesneler daha çok etkilenir.

Örnek: Rüzgar ve Kütle

Şimdi rüzgar ekleyerek kütlenin etkisini görelim. Hafif toplar rüzgardan çok etkilenecek!

Dikkat Edilecekler:

Yerçekimi
Herkese aynı etkiyi yapar (kütleden bağımsız düşme). Ama biz basitlik için F = m × g yerine sabit F kullanıyoruz.
Rüzgar
Kütle farkı burada belli olur! Hafif toplar sağa daha hızlı gider.

🔬 Deneyin:

  1. Canvas'a tıklayın ve rüzgarı gözlemleyin.
  2. Hangi toplar daha çok etkileniyor? Küçükler mi, büyükler mi?
  3. Rüzgar gücünü artırın: createVector(0.5, 0)

Bonus: Gerçek Yerçekimi Formülü

Daha gerçekçi bir simülasyon için yerçekimini de kütleye bağlı yapabiliriz:

// Gerçek yerçekimi: F = m × g
// g = yerçekimi ivmesi (simülasyonda ~0.1)

function draw() {
  for (let mover of movers) {
    // Her mover için kendi kütlesine göre yerçekimi
    let g = 0.1;
    let gravityForce = createVector(0, mover.mass * g);
    mover.applyForce(gravityForce);

    // Rüzgar (kütleden bağımsız)
    if (mouseIsPressed) {
      let wind = createVector(0.1, 0);
      mover.applyForce(wind);
    }

    mover.update();
    mover.checkEdges();
    mover.show();
  }
}

Bu durumda tüm toplar aynı hızda düşer (Galileo'nun dediği gibi), ama rüzgardan farklı etkilenirler.

📝 Bu Bölümün Özeti