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

Çok sayıda nesnenin hareketi

Burada ilham aldığımız, gerçek hayatta, birden fazla hareketli nesnemiz bulunur - farklı kütle ve konumda birçok nesneyle çevriliyiz. Mover'ımızın gerçek hayatın bu özelliğini daha iyi simüle etmesini nasıl sağlayacağımıza bakalım.
Bunu yapmak için, nesne yönelimli programlamanın kısa bir tekrarı gerekiyor. Yine söylemek gerekirse, burada OO programlamanın temellerini yapmıyoruz. Ancak, nesnelerle dolu bir dünya yaratma fikri bu dersteki tüm örneklere temel oluşturduğundan, bir nesneden çok nesneye geçme adımlarını atmak için zaman harcamak önemlidir.
Hatırlatma olarak, şu anki Mover'ımız şuna benziyor. Vektörlere giriş yaptığımız zaman oluşturduğumuz Mover nesnesine eştir, ama iki ekleme vardır—kütle ve yeni bir applyForce() yöntemi:
Artık nesnemizi kurduğumuza göre, bir diziyle. örneğin, yirmi Mover nesnesi oluşturmayı seçebilir, ve bunları bir döngüyle başlatabiliriz
var movers = [];

for (var i = 0; i < 20; i++) {
    movers[i] = new Mover();
}
Ancak şimdi küçük bir sorunumuz var. Mover nesnesinin yapıcısına bakarsak…
var Mover = function() {
    this.mass = 1;
    this.position = new PVector(30, 30);
    this.velocity = new PVector(0, 0);
    this.acceleration = new PVector(0, 0);
};
…her Mover nesnesinin aynı şekilde yapıldığını farkederiz. İstediğimiz, farklı konumlardan başlayan, farklı kütleli Mover nesneleridir. Burada argüman ekleyerek yapıcımızın karmaşıklığını artırmamız gerekir.
var Mover = function(m, x, y) {
    this.mass = m;
    this.position = new PVector(x, y);
    this.velocity = new PVector(0, 0);
    this.acceleration = new PVector(0, 0);
};
Artık kütle ve konumun kodlanmış sayılar olmak yerine, yapıcıya geçirilen argümanlarla başlatıldığına dikkat edin. Bunun anlamı, çeşitli Mover nesneleri oluşturabileceğimizdir: büyük nesneler, küçük nesneler, ekranın solundan başlayan nesneler, sağdan başlayan nesneler, vb.
// Pencerenin sol tarafında büyük bir Mover
var m1 = new Mover(10, 0, height/2);
// Pencerenin sağ tarafında küçük bir Mover
var m2 = new Mover(0{,}1, width, height/2);
Ancak, bir dizide, nesnelerin hepsini bir döngüyle başlatmak isteriz.
for (var i = 0; i < movers.length; i++) {
    movers[i] = new Mover(random(0{,}1, 5), 0, 0);
}
Oluşturulan her hareketli için, kütle 0,1 ile 5 arasında rastgele bir değere, başlangıçtaki x-konumu 0'a, ve başlangıçtaki y-konumu 0'a ayarlanır. Nesneleri başlatmak için seçebileceğimiz her türlü yol mevcuttur; burada sadece bir olasılık gösterilmektedir.
Bir nesne dizisi bildirildikten, oluşturulduktan, ve başlatıldıktan sonra, kodun geri kalanı basittir. Her nesneden geçeriz, onları çevredeki kuvvetlere tabi tutarız, ve gösterinin tadını çıkarırız.
draw = function() {
  background(50, 50, 50);

  for (var i = 0; i < movers.length; i++) {
    var wind = new PVector(0{,}01, 0);
    var gravity = new PVector(0, 0{,}1);
    movers[i].applyForce(wind);
    movers[i].applyForce(gravity);
    movers[i].update();
    movers[i].display();
    movers[i].checkEdges();
  }
};
Burada, her şeyiyle programın nasıl göründüğünü bulabilirsiniz. Dikkat ederseniz, programdaki küçük çemberler pencerenin sağına büyük çemberlerden çok daha hızlı ulaşırlar. Bu, formülümüz yüzündendir: ivme = kuvvet bölü kütle. Kütle ne kadar fazlaysa, ivme o kadar azdır.

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.