Dönen Nesneler (Angular Motion)

Önceki bölümlerde nesnelerin doğrusal hareketini (linear motion) inceledik: konum, hız ve ivme. Şimdi aynı kavramları dönme hareketine uygulayacağız.

💡 Doğrusal vs Açısal

Doğrusal harekette piksel kullanırken, açısal harekette radyan kullanıyoruz. Kavramlar aynı, sadece birimler farklı!

Doğrusal ve Açısal Hareket Karşılaştırması

Kavram Doğrusal (Linear) Açısal (Angular)
Konum position (x, y) piksel angle (θ) radyan
Hız velocity (vx, vy) piksel/frame angularVelocity (ω) radyan/frame
İvme acceleration (ax, ay) piksel/frame² angularAcceleration (α) radyan/frame²
Doğrusal: position += velocity, velocity += acceleration
Açısal: angle += angularVelocity, angularVelocity += angularAcceleration
Formüller tamamen aynı, sadece değişkenler farklı!

En Basit Örnek: Sabit Hızda Dönen Çizgi

Dönen bir nesne oluşturmanın en basit yolu: her frame'de açıyı biraz arttırmak.

Satır Satır Açıklama:

Satır 1-2
angle şu anki dönme açısı (radyan). angularVelocity her frame'de açının ne kadar artacağı.
Satır 10
translate() koordinat sisteminin merkezini canvas ortasına taşır. Dönme bu yeni merkez etrafında olacak.
Satır 13
rotate(angle) tüm çizimleri mevcut açı kadar döndürür. Bu satırdan sonra çizilen her şey döndürülmüş olacak.
Satır 21
Her frame'de açıyı artırıyoruz. Bu basit satır dönme hareketini sağlıyor!

🔬 Deneyin:

  1. Satır 2: angularVelocity = 0.1 yapın. Beklenti: Daha hızlı döner
  2. Satır 2: angularVelocity = -0.02 yapın. Beklenti: Ters yöne döner (saat yönünde)

Açısal İvme (Angular Acceleration)

Sabit hızla dönmek sıkıcı! Gerçek dünyada nesneler hızlanır ve yavaşlar. Bunu açısal ivme ile modelleyebiliriz.

Önemli Noktalar:

Satır 3
angularAcceleration her frame'de açısal hızın ne kadar artacağı. Pozitif değer = hızlanma, negatif değer = yavaşlama.
Satır 27
Fareye göre ivme hesaplıyoruz. Fare sağda ise pozitif, solda ise negatif ivme. map() fare x pozisyonunu -0.001 ile 0.001 arasına dönüştürür.
Satır 30-31
Newton'un hareket yasaları! Önce ivme hızı değiştirir, sonra hız açıyı değiştirir. Doğrusal hareketteki gibi.

⚠️ Hız Sınırı

Gerçek dünyada sürtünme olmadan hız sonsuza kadar artabilir. Simülasyonlarda genellikle constrain() ile hızı sınırlarız:

angularVelocity = constrain(angularVelocity, -0.2, 0.2);

Hareket Yönüne Bakma (Pointing in Direction of Motion)

Bir araba veya ok gibi nesnelerin hareket ettikleri yöne bakmasını istiyorsak, hız vektöründen açı hesaplayabiliriz.

θ = atan2(velocity.y, velocity.x)
Hız vektöründen hareket yönü açısını hesapla

Kilit Nokta:

Satır 31
velocity.heading() p5.js'te vektörün yönünü radyan olarak verir. Bu, atan2(velocity.y, velocity.x) ile aynı sonucu verir.

📝 Bu Bölümün Özeti