Ana içerik
Bilgisayar Programlama
Konu: Bilgisayar Programlama > Ünite 5
Ders 5: Kuvvetler- Newton'un Hareket Yasaları
- Zor görev: Havada süzülen balon
- Çok sayıda nesnenin hareketi
- Bilgi Ölçme Yarışması: Duvar topları
- Yerçekimi ve sürtünmeyi modelleme
- Bilgi Ölçme Yarışması: Hız tümsekleri
- Hava ve sıvı direnci
- Bilgi Ölçme Yarışması: Batan kütükler
- Yerçekimsel çekim
- Zor görev: Sanat jeneratörü
- Karşılıklı çekim
- Bilgi Ölçme Yarışması: Karşılıklı itme
© 2023 Khan AcademyKullanım ŞartlarıGizlilik PolitikasıÇerez Politikası
Ç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şlatabilirizvar 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.