Salınım Hareketi (Simple Harmonic Motion / SHM)
Basit harmonik hareket, doğada en sık karşılaşılan hareket türlerinden biridir: salıncak, yay, ses dalgaları, kalp atışı... Bu hareketin özü: sinüs dalgası!
💡 Neden "Harmonik"?
"Harmonik" müzikte uyumlu sesler demek. Bu hareket de aynı şekilde düzenli, öngörülebilir ve "uyumlu" bir salınım üretiyor. Doğadaki birçok periyodik hareketin temelini oluşturur.
Sinüs Dalgası (Sine Wave)
Önceki bölümde öğrendiğimiz sin() fonksiyonu,
basit harmonik hareketin anahtarıdır. Sin fonksiyonu -1 ile 1 arasında
sürekli salınım yapar.
frameCount veya artan bir sayaç.
En Basit Örnek: Yatay Salınım
Sin fonksiyonu -1 ile 1 arasında değer üretir. Bunu genlik (amplitude) ile çarparak istediğimiz aralıkta salınım elde ederiz.
Satır Satır Açıklama:
angle sin fonksiyonuna vereceğimiz açı.
Sürekli artarak salınımı sağlar.
angularVelocity açının ne kadar hızlı artacağı.
Büyük değer = hızlı salınım.
amplitude salınımın genliği.
sin() -1 ile 1 arasında, amplitude ile çarpınca -100 ile 100 arası olur.
sin(angle) -1 ile 1 arasında,
amplitude ile çarpınca x pozisyonu -100 ile 100 arasında salınır.
🔬 Deneyin:
-
Satır 2:
angularVelocity = 0.1yapın. Beklenti: Daha hızlı salınım -
Satır 3:
amplitude = 150yapın. Beklenti: Daha geniş salınım -
Satır 12:
cos(angle)yapın. Beklenti: Aynı salınım, farklı başlangıç noktası (faz farkı)
Periyot ve Frekans (Period & Frequency)
Salınımı tanımlamanın başka bir yolu: ne kadar sürede bir tam salınım yapıyor?
// Periyot ile çalışma
let period = 120; // 120 frame'de bir tam salınım
let amplitude = 100;
function draw() {
// TWO_PI = tam bir sinüs dalgası
// frameCount / period → 0'dan 1'e gider (period frame'de)
// TWO_PI ile çarpınca → 0'dan 2π'ye gider
let x = amplitude * sin(TWO_PI * frameCount / period);
}
💡 TWO_PI Neden?
Sin fonksiyonu 0'dan 2π'ye giderken tam bir dalga çizer.
TWO_PI * frameCount / period ifadesi,
period kadar frame'de tam bir dalga oluşturur.
Dalga Çizimi (Drawing Waves)
Sinüs dalgasını görselleştirmenin en iyi yolu: birçok noktayı yan yana çizmek.
Önemli Noktalar:
startAngle dalganın başlangıç açısı.
Bunu değiştirerek dalga "kayar".
startAngle'ı artırarak dalganın hareket etmesini sağlıyoruz.
Oscillator Sınıfı (Oscillator Class)
Birden fazla salınım yapan nesne istiyorsak, bir Oscillator sınıfı
oluşturmak mantıklı:
Sınıf Yapısı:
📝 Bu Bölümün Özeti
- Basit Harmonik Hareket: Sinüs dalgası ile salınım
- Amplitude (Genlik): Salınımın maksimum uzaklığı
- Period (Periyot): Bir tam salınım süresi
- Frequency (Frekans): Birim zamandaki salınım sayısı
- x = A × sin(angle): Temel salınım formülü
- TWO_PI: Tam bir sinüs dalgası için gereken açı