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² |
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:
angle şu anki dönme açısı (radyan).
angularVelocity her frame'de açının ne kadar artacağı.
translate() koordinat sisteminin merkezini canvas ortasına taşır.
Dönme bu yeni merkez etrafında olacak.
rotate(angle) tüm çizimleri mevcut açı kadar döndürür.
Bu satırdan sonra çizilen her şey döndürülmüş olacak.
🔬 Deneyin:
-
Satır 2:
angularVelocity = 0.1yapın. Beklenti: Daha hızlı döner -
Satır 2:
angularVelocity = -0.02yapı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:
angularAcceleration her frame'de açısal hızın ne kadar artacağı.
Pozitif değer = hızlanma, negatif değer = yavaşlama.
map() fare x pozisyonunu -0.001 ile 0.001 arasına dönüştürür.
⚠️ 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.
Kilit Nokta:
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
- angle: Nesnenin dönme açısı (radyan)
- angularVelocity: Açının değişim hızı (radyan/frame)
- angularAcceleration: Açısal hızın değişim hızı
- rotate(): Çizimleri döndürür
- velocity.heading(): Hız vektörünün yönü