Salınımın Temeli: Açılar (Angles)

Salınım hareketlerini anlamak için önce açıları ve trigonometriyi anlamamız gerekiyor. Bu kavramlar, dönen nesnelerden dalgalara kadar her yerde karşımıza çıkacak.

Derece cinsinden açılar
Şekil 3.1: Derece cinsinden ölçülen açılar.
45 derece dönmüş kare
Şekil 3.2: Merkezi etrafında 45 derece dönmüş bir kare.

💡 Neden Trigonometri?

Doğada birçok hareket dairesel veya periyodiktir: gezegenlerin yörüngeleri, kalp atışları, ses dalgaları, sarkaç hareketi... Trigonometri bu hareketleri matematiksel olarak tanımlamamızı sağlar.

🎮 Oyun ve Fizik Programlamada Trigonometri

Trigonometri olmadan modern oyunlar ve simülasyonlar yapmak neredeyse imkansız! İşte bazı kullanım alanları:

Karakterin Baktığı Yön
Düşmana veya fareye doğru bakan bir karakter? atan2() ile açı hesapla, rotate() ile döndür.
Mermi Hareketi
Belirli bir açıda ateşlenen mermi: vx = speed × cos(angle), vy = speed × sin(angle)
Dairesel Hareket
Yörüngedeki gezegenler, dönen tekerlek, radar taraması... Hepsi sin/cos ile!
Dalga Efektleri
Su dalgaları, ses dalgaları, bayrak dalgalanması: periyodik sin fonksiyonu.
Mesafe ve Çarpışma
İki nokta arası mesafe: Pisagor teoremi. Açılı çarpışma: vektör döndürme.

🎯 Somut Örnekler

  • Angry Birds: Mermi fiziği (parabolik yörünge)
  • Asteroids: Uzay gemisi rotasyonu ve hareket yönü
  • Mario: Platform kenarlarından düşme açısı
  • Flappy Bird: Kuşun eğimi (velocity.y'den açı)
  • Racing Games: Araç dönüşleri ve drift açıları

Radyan vs Derece (Radians vs Degrees)

Açıları ölçmek için iki farklı birim kullanabiliriz:

360° = 2π radyan ≈ 6.28 radyan
Tam bir daire dönüşü
Derece (°)
Günlük hayatta kullandığımız ölçü. Tam daire = 360°. 90° = çeyrek dönüş (dik açı).
Radyan (rad)
Matematik ve programlamada tercih edilen ölçü. Tam daire = 2π ≈ 6.28. π/2 ≈ 1.57 = çeyrek dönüş (dik açı).
Radyan tanımı
Şekil 3.3: 1 radyanlık açı, yay uzunluğunun yarıçapa eşit olduğu açıdır.
DERECE 90° 180° 270° RADYAN 0 π/2 π 3π/2

p5.js'te Dönüşüm

// Derece → Radyan
let radyan = radians(90);    // 90° → π/2 ≈ 1.5708

// Radyan → Derece
let derece = degrees(PI);    // π → 180°

// p5.js sabitleri
PI          // ≈ 3.14159 (yarım daire)
TWO_PI      // ≈ 6.28318 (tam daire)
HALF_PI     // ≈ 1.5708  (çeyrek daire)
QUARTER_PI  // ≈ 0.7854  (sekizde bir)

⚠️ Dikkat: p5.js Varsayılanı

p5.js'te rotate(), sin(), cos() gibi fonksiyonlar varsayılan olarak RADYAN kullanır!

// ❌ YANLIŞ - 45 radyan döndürür (çok fazla!)
rotate(45);

// ✅ DOĞRU - 45 derece döndürür
rotate(radians(45));

// ✅ VEYA angleMode değiştir
angleMode(DEGREES);
rotate(45);  // Artık derece olarak çalışır

🎮 İnteraktif: Radyan ve Derece Karşılaştırma

Fareyi hareket ettirerek açının hem derece hem radyan değerini görün:

Birim Çember (Unit Circle)

Birim çember, yarıçapı tam olarak 1 olan ve merkezi orijinde (0, 0) bulunan bir çemberdir. Trigonometriyi anlamanın anahtarı bu çemberdir!

x² + y² = 1
Birim çember denklemi (yarıçap = 1)

Birim Çemberde Koordinatlar

Birim çember üzerinde herhangi bir nokta seçtiğinizde, o noktanın koordinatları doğrudan cos ve sin değerlerini verir:

💡 Neden "Birim"?

Yarıçap 1 olduğu için hesaplamalar çok basitleşir. Başka yarıçaplar için sadece çarpmak yeterli: x = r × cos(θ), y = r × sin(θ)

🎮 İnteraktif: Birim Çember Keşfi

Fareyi çemberin etrafında hareket ettirin ve sin/cos değerlerinin nasıl değiştiğini gözlemleyin:

Birim Çemberde Önemli Noktalar:

0° (sağ)
cos(0) = 1, sin(0) = 0 → Nokta (1, 0)'da
90° (yukarı)
cos(90°) = 0, sin(90°) = 1 → Nokta (0, 1)'de
180° (sol)
cos(180°) = -1, sin(180°) = 0 → Nokta (-1, 0)'da
270° (aşağı)
cos(270°) = 0, sin(270°) = -1 → Nokta (0, -1)'de

Sinüs ve Kosinüs (Sine & Cosine)

Trigonometrinin en önemli iki fonksiyonu: sin() ve cos(). Bu fonksiyonlar bir açıyı alır ve -1 ile 1 arasında bir değer döndürür.

sin(θ) ve cos(θ) → [-1, 1]
Her ikisi de -1 ile 1 arasında değer üretir

Birim Çemberde Sin ve Cos

Yarıçapı 1 olan bir çember düşünün (birim çember). Merkezi (0,0) noktasında. Çember üzerinde bir nokta seçin ve merkeze bir çizgi çekin. Bu çizginin x ekseniyle yaptığı açı θ (teta) olsun:

💡 Hatırlatma Yöntemi

"cos = x, sin = y" - Alfabetik sıra! c(os) harfi s(in)'den önce gelir, x de y'den önce gelir.

Değerler Nasıl Değişir?

Açı (°) Açı (rad) cos(θ) sin(θ)
0 1 0
90° π/2 0 1
180° π -1 0
270° 3π/2 0 -1
360° 1 0

🎮 İnteraktif: Sinüs Dalgası

Birim çember dönüşü ile sinüs dalgasının nasıl oluştuğunu görün:

🎮 İnteraktif: Kosinüs Dalgası

Kosinüs, sinüsten 90° (π/2) faz kayması ile başlar:

🎮 İnteraktif: Tanjant Fonksiyonu

tan(θ) = sin(θ) / cos(θ). 90° ve 270°'de sonsuza gider:

Dik Üçgende Trigonometri

Orijinal tanım aslında dik üçgenden gelir. Bir dik üçgende:

Dik üçgende trigonometrik fonksiyonlar
Şekil 3.4: Dik üçgende sin, cos ve tan fonksiyonları. Karşı kenar (opposite), komşu kenar (adjacent) ve hipotenüs (hypotenuse) arasındaki ilişkiler.
sin(θ) = karşı kenar / hipotenüs
cos(θ) = komşu kenar / hipotenüs
tan(θ) = karşı kenar / komşu kenar
SOH-CAH-TOA kuralı

💡 SOH-CAH-TOA

Sin = Opposite / Hypotenuse (Karşı/Hipotenüs)
Cos = Adjacent / Hypotenuse (Komşu/Hipotenüs)
Tan = Opposite / Adjacent (Karşı/Komşu)

Tanjant (tan) ve Diğer Fonksiyonlar

tan(θ) = sin(θ) / cos(θ) formülüyle hesaplanır. Birim çemberde, tanjant değeri noktadan x eksenine çizilen teğet çizginin uzunluğunu verir.

Örnek: Fareyi Takip Eden Ok (Pointing Towards Mouse)

Trigonometrinin en yaygın kullanımlarından biri: bir nesnenin başka bir noktaya bakmasını sağlamak. Bunun için atan2() fonksiyonunu kullanacağız.

θ = atan2(y₂ - y₁, x₂ - x₁)
İki nokta arasındaki açıyı hesaplar
atan2 fonksiyonu ve vektör yönü
Şekil 3.8: v1 ve v2 vektörleri zıt yönlere bakıyor. atan2() fonksiyonu doğru yönü hesaplamamızı sağlar.

Satır Satır Açıklama:

Satır 6-7
translate() koordinat sisteminin merkezini canvas ortasına taşır. Artık (0,0) noktası canvas'ın ortasında!
Satır 10-11
Fare pozisyonunu yeni koordinat sistemine göre hesaplıyoruz. Fare canvas ortasının sağında ise dx pozitif, solunda ise negatif.
Satır 14
atan2(dy, dx) - En önemli satır! dy ve dx değerlerinden açıyı hesaplar. Sonuç radyan cinsindendir.
Satır 17
rotate(angle) tüm çizimleri bu açı kadar döndürür. Okumuz artık fareye doğru bakıyor!

🔬 Deneyin:

  1. Satır 14: atan2(dy, dx) yerine atan2(dx, dy) yapın. Beklenti: Ok yanlış yöne bakar (90° kayık)
  2. Satır 17: rotate(angle + PI) yapın. Beklenti: Ok ters yöne bakar (180° döner)

📝 Bu Bölümün Özeti