Ana içerik
Bilgisayar Programlama
Konu: Bilgisayar Programlama > Ünite 5
Ders 7: SalınımDalgalar
Kendinize şöyle diyorsanız, “Bu çok şahane, ancak asıl çizmek istediğim şey, ekranda bir dalgadır,” zamanı geldi. Aslında, bunu yapmaya %90 ölçüde yakınız. Bir tek çemberi sinüs fonksiyonuna göre yukarı aşağı salındırırsak, yaptığımız şey, bir dalga örüntüsünün x ekseninde bir noktaya bakmaktır. Biraz gösteriş ve bir for döngüsüyle, bu salınan çemberlerin birçoğunu yan yana koyabiliriz.
Bu dalgalı örüntü, bir yaratığın gövdesi veya uzuvlarının tasarımında olduğu gibi, (su gibi) yumuşak bir yüzeyin benzetiminde de kullanılabilir.
Burada, genlik (örüntünün yüksekliği) ve periyotla ilgili aynı sorularla karşı karşıya kalacağız. Ancak, periyodun zamanı göstermesi yerine, tam dalgaya baktığımız için, periyodu (piksel cinsinden) tam bir dalga döngüsünün eni olarak da düşünebiliriz: .Basit salınımda olduğu gibi, dalga örüntüsünü, kesin bir periyoda göre veya açısal hız modelini kullanarak hesaplama seçeneğimiz bulunmaktadır.
Daha basit durumla devam edelim, açısal hız. Bir açı, açısal hız, ve genlikle başlamamız gerektiğini biliyoruz:
var angle = 0;
var angleVel = 0{,}2;
var amplitude = 100;
Sonra, dalganın bir noktasını çizmek istediğimiz tüm x değerlerini döngüye koyacağız. Şimdilik 24 pikselde bir diyelim. Bu döngüde, üç şey yapmak isteyeceğiz:
- Genlik ve açının sinüsüne göre, y konumunu bulma.
- (x,y) konumunda bir çember çizme.
- Açısal hıza göre açıyı artırma.
for (var x = 0; x <= width; x += 24) {
// Calculate y location according to amplitude and sine of angle
var y = amplitude * sin(angle);
// Draw a circle at the x, y location
ellipse(x, y+height/2, 48, 48);
// Increment the angle according to angular velocity
angle += angleVel;
}
angleVel
'in farklı değerlerinin verdiği sonuçlara bakalım:Dikkat ederseniz, dalganın periyodunun kesin olarak hesaplamasak da, hız ne kadar yüksek olursa, periyot o kadar kısa olur. Periyot kısaldıkça, noktaların arasındaki uzaklık arttığından, dalgayı farketmenin zorlaşacağını da belirtmek gerekir. Bir seçenek, noktaları bir çizgiyle birleştirmek için,
beginShape()
ve endShape()
'i kullanmaktır.Üstteki örnek durağandır. Dalga hiç değişmez, hiç inip çıkmaz ve biz buna ulaşmaya çalışıyorduk. Dalganın canlandırılmasıyla ilgili bu ekstra adım biraz zordur. İlk bakışta şunu söylemek isteyebilirsiniz: “Hey, problem yok, açıyı genel bir değişken olarak düşünelim ve
draw()
'da bir döngüden diğerine artırmayı deneyelim.”Bu güzel bir düşünce olsa da, işe yaramayacaktır. İstatistiksel çizilmiş dalgaya bakarsanız, sağ kenar sol kenarla eşleşmez; Bir
draw()
döngüsünde bittiği yer, bir sonrakinde başladığı yer olamaz. Bunun yerine, yapmamız gereken, dalganın başlaması gereken açı değerine bir değişken adamaktır. (Adına startAngle
diyeceğimiz) bu açı, kendi açısal hızıyla artar.İşte, başlangıç açısı dahil, bunu bulabilirsiniz. Salınan dalgaya neler olduğunu görmek için, farklı sayıları değiştirmeyi deneyin.
Bu "Doğal Simülasyonlar" dersi, Daniel Shiffman'ın"Kodun Doğası"'nın bir türevidir ve Creative Commons Yüklemesi-Ticari Olmayan 3,0 Dağıtıma Açık Lisansla kullanılmaktadır.
Tartışmaya katılmak ister misiniz?
Henüz gönderi yok.