If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Rastgele yürüyüşler

Vektör ve fizik-tabanlı hareketin karmaşıklıklarına girmeden önce,ekranın etrafında hareket etmenin anlamını düşünelim. Hareketin en iyi bilinen ve en basit simülasyonlarından biriyle başlayalım—rastgele yürüyüş.
Bir denge aletinin ortasında durduğunuzu hayal edin. On saniyede bir, yazı tura atın. Tura, bir adım ileri atın. Yazı, bir adım geri atın. Bu, rastgele bir yürüyüş—bir dizi rastgele adım olarak tanımlanan bir yol. Denge tahtasından yere indiğinizde, iki boyutta rastgele bir yürüyüş gerçekleştirmak için aynı parayı iki kere atıp aşağıdaki sonuçları elde edebilirsiniz:
1. Atış2. AtışSonuç
TuraTuraİleri adım atın.
TuraYazıSağa adım atın.
YazıTuraSola adım atın.
YazıYazıGeri adım atın.
Evet, bu karmaşık olmayan bir algoritmaya benzeyebilir. Yine de, rastgele yürüyüşler, gazdaki moleküllerden bir kumarbazın kumarhanede bir gün boyunca davranışına, gerçek hayatta ortaya çıkan olayları modellemek için kullanılabilir. Bize gelince, bu konuya başlarken aklımızda üç hedefle rastgele bir yürüyüşü incelemek istiyoruz.

Rastgele Walker Nesnesi

Önce bir Walker nesnesi oluşturarak biraz nesne-yönelimli programlamayı (OOP) gözden geçirelim. Bu sadece üstünkörü bir inceleme olacak. Eğer daha önce OOP ile çalışmadıysanız, Nesne-Yönelimli JavaScript bölümünü gözden geçirmelisiniz.
JavaScript'te bir nesne, prototipi vasıtasıyla, özellikleri ve işlevselliği olan bir veri türüdür. Verilerini hem izleyen (ekrandaki yerini), hem de belirli eylemleri (kendini çizme veya adım atma) uygulama becerisine sahip bir Walker nesnesi tasarlamak istiyoruz.
Walker oluşumlarını yaratmak için, bir Walker nesnesini tanımlamamız gerekir. Bu nesneyi kurabiye kalıbı olarak kullanacağız, ve her yeni Walker olayı kurabiye olur.
Walker nesne türünü tanımlayarak başlayın. Walker'ın sadece iki parça veriye ihtiyacı olur—x-konumu için bir sayı ve y-konumu için bir sayı. Bunları yapıcı fonksiyonda ayarlayacağız, ve tuvalin ortasına kuracağız.
var Walker = function() {
    this.x = width/2;
    this.y = height/2;
};
x ve y'sini izlemenin yanı sıra, Walker nesnemizin çağırabileceğimiz yöntemleri de olacak. Birincisi, nesnenin kendini siyah bir nokta olarak göstermesini sağlayan bir yöntem olacaktır. Hatırlarsanız, JavaScript'te bir nesneye yöntem eklemek için, bu yöntemleri nesnenin prototipine ekleriz.
Walker.prototype.display = function() {
    stroke(0, 0, 0);
    point(this.x, this.y);
};
İkinci yöntem, Walker nesnesini bir adım atmak için yönlendirir. Şimdi, burada her şey biraz daha ilginçleşir. Üzerinde rastgele adım attığımız yeri hatırlıyor musunuz? Şimdi, tuvali aynı şekilde kullanabiliriz. Dört olası adım vardır. Sağa doğru bir adım, x'i artırmakla (x++); sola doğru x'i azaltmakla (x--); ileri doğru bir piksel aşağı (y++); ve geriye doğru bir piksel yukarı (y--) şeklinde benzetilebilir. Bu dört seçenek arasından nasıl seçim yaparız? Daha önce, iki parayla yazı tura atabileceğimizi söylemiştik. Ancak, ProcessingJS'de, bir seçenek listesinden rastgele seçmek istersek, random() kullanarak rastgele bir sayı seçebiliriz.
Walker.prototype.walk = function() {
    var choice = floor(random(4));
};
Üstteki kod satırı, 0 ila 4 arasında rastgele gerçel bir sayı seçer ve bunu floor() kullanarak doğal sayıya çevirir, sonuç 0, 1, 2, veya 3 olur. Teknik olarak, en büyük sayı hiç 4,0 olmaz, ama daha çok 3,999999999 olur (burada ondalık basamağı kadar 9 olur); floor() daha küçük veya eşit, en yakın, doğal sayıyı verdiği için, elde edebileceğimiz en yüksek sonuç 3'tür. Daha sonra, seçilen rastgele sayıya göre, uygun adımı (sol, sağ, yukarı, veya aşağı) atarız.
Walker.prototype.walk = function() {
    var choice = floor(random(4));
    if (choice === 0) {
        this.x++;
    } else if (choice === 1) {
        this.x--;
    } else if (choice === 2) {
        this.y++;
    } else {
        this.y--;
    } 
};
Artık sınıfı yazdığımıza göre, programımızda gerçek bir Walker nesnesi yazma zamanı geldi. Bir tek rastgele yürüyüşü modellediğimizi varsayarsak, yeni işlemcili yapıcı fonksiyonunu çağırarak Walker türünde bir genel değişkeni bildirir ve başlatırız.
var w = new Walker();
Şimdi, yürüyüşçünün gerçekten de bir şey yapmasını sağlamak için, draw() fonksiyonunu tanımlarız, ve her çağırıldığında yürüyüşçüye bir adım atmasını ve çizmesini söyleriz:
draw = function() {
    w.walk();
    w.display();
};
draw fonksiyonunda background() çağırmadığımız için, tuvalimizde rastgele yürüyüşün izini görebiliriz:

Rastgele Yürüyüşçüyü İyileştirme

Rastgele yürüyüşçüye yapabileceğimiz birkaç iyileştirme bulunmaktadır. İlk olarak, bu yürüyüşçünün adım seçenekleri dört seçenekle sınırlıdır—yukarı, aşağı, sola, ve sağa. Ancak, penceredeki herhangi bir pikselin sekiz olası komşusu vardır, ve dokuzuncu bir olasılık da aynı yerde kalmaktır.
Kodun Niteliği Görüntüsü
Şekil I.1
Komşu bir piksele adım atan (veya olduğu yerde kalan) bir Walker nesnesi oluşturmak için, 0 ila 8 arasında bir sayı seçebiliriz (dokuz olası seçenek). Ancak, kodu yazmanın daha etkili bir yolu, x-ekseni boyunca üç olası adımdan (-1, 0, veya 1) veya y-ekseni boyunca üç olası adımdan seçmektir.
Walker.prototype.walk = function() {
  var stepx = floor(random(3))-1;
  var stepy = floor(random(3))-1;
  this.x += stepx;
  this.y += stepy;
};
Bunu daha da ileri götürürsek, bunun yerine x ve y için bir ondalık sayı kullanabiliriz ve -1 ila 1 arasındaki rastgele bir değere göre hareket edebiliriz - eğer ortamımız gerçekten "2,2" ile "2,4": arasındaki farkı gösterebilirse.
Walker.prototype.walk = function() {
  var stepx = random(-1, 1);
  var stepy = random(-1, 1);
  this.x += stepx;
  this.y += stepy;
};
Bu “geleneksel” rastgele yürüyüşteki varyasyonların ortak bir noktasıı vardır: herhangi bir anda, Walker'ın belirli bir yönde bir adım atma olasılığı, Walker'ın herhangi bir yönde adım atma olasılığına eşittir. Başka bir deyişle, dört olası adım varsa, Walker'ın herhangi bir adım atması için 4'te 1 (veya %25) şans vardır. Dokuz olası adımla, bu şans 9'da 1'dir (veya %11,1).
Neyse ki, random() fonksiyonu böyle çalışır. Rastgele sayı oluşturucu, “tek tip” bir sayı dağılımı üretir. Bu dağılımı, rastgele bir sayının kaç kere seçildiğini sayan ve bunu bir dikdörtgenin yüksekliği olarak çizen bir programla test edebiliriz:
Birkaç dakika koştuktan sonra, çubuklar aynı yükseklikte midir? Muhtemelen hayır. Örneklem boyutumuz (yani seçtiğimiz rastgele sayı sayısı) bayağı küçüktür ve bazı sayılar daha sık seçildiği farklı durumlar olabilir. Zamanla, iyi bir rastgele sayı üreteciyle, bu durum eşitlenir.
random() fonksiyonundan elde ettiğimiz sayılar, gerçekten de rastgele değildir, bu yüzden bunlara “sözde rastgele” denir. Bunlar, rastgeleliği simüle eden bir matematiksel fonksiyonun sonucudur. Bu fonksiyon zamanla bir örüntü gösterir, ama bu zaman periyodu o kadar uzundur ki, bizim açımızdan saf rastgelelikle aynı sayılır!
Bir sonraki bölümde, belirli yönlerde yürüme "eğilimli" yürüyüşçüleri  oluşturmanın farklı yollarını göreceğiz. Buna dalmadan önce, sizi bekleyen bir görev var!

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.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.