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ı
Hava ve sıvı direnci
Bir cisim sıvı veya gazdan geçerken de sürtünme oluşur. Bu kuvvetin birçok değişik ismi vardır, bunların hepsinin anlamı aynıdır: viskoz kuvveti, sürtünme kuvveti, sıvı direnci. Sonuç önceki sürtünme örnekleriyle aynı olsa da (nesne yavaşlar), sürtünme kuvvetini hesaplama yolumuz biraz farklı olacaktır. Formüle bakalım:
Şimdi bunu parçalarına ayıralım ve Processing JS'de etkili bir simulasyon için gerçekten neye ihtiyacımız olduğuna bakalım, böylece süreç içinde çok daha basit bir formül elde edelim.
- F, start subscript, d, end subscript sürtünme kuvvetini, hesaplamak ve
applyForce()
fonksiyonumuza geçirmek istediğimiz vektörünü belirtir. - -1/2 bir sabittir: -0,5. Bu, ProcessingJS dünyamız açısından oldukça alakasızdır, çünkü diğer sabitler için değerler uyduracağız. Ancak, bunun negatif olması önemlidir, çünkü bu, kuvvetin (sürtünmede olduğu gibi) hızın ters yönünde olduğunu belirtir.
- rho, rho Yunanca harfidir, ve sıvının özkütlesini belirtir, bunu dert etmemize gerek yok. Problemi sadeleştirebiliriz ve bunun sabit 1 değerine sahip olduğunu düşünebiliriz.
- vhareket eden nesnenin hızını belirtir. Tamam, bunu anladık! Bu nesnenin sürati, hız vektörünün büyüklüğüdür:
velocity.magnitude()
. Ayrıca, v, squared, v kare veya v, times, v anlamına gelir. - A, nesnenin sıvıdan (veya gazdan) geçen ön alanını belirtir. Örneğin, aerodinamik bir Lamborghini, kutu gibi bir Volvo'dan daha az hava direnci yaşayacaktır. Yine de, temel bir simulasyon için, nesnemizin küresel olduğunu düşünebilir ve bu öğeyi yok sayabiliriz.
- C, start subscript, d, end subscript çekme kuvvetidir, bu da sürtünme kuvvetiyle tamamen aynıdır (ρ). Bu, çekme kuvvetinin kuvvetli mi, zayıf mı olduğuna göre belirleyeceğimiz bir sabittir.
- v, with, hat, on top Tanıdık geliyor mu? Öyle gelmeli. Bui hız birim vektörünü belirtir, yani
velocity.normalize()
. Sürtünmeyle olduğu gibi, çekme, hızın ters yönünde bir kuvvettir.
Artık bu bileşenlerin her birini analiz ettiğimize ve basit bir simulasyon için neye ihtiyacımız olduğunu belirlediğimize göre, formülümüzü şöyle indirgeyebiliriz:
veya:
// Formülümüzün 1. parçası (büyüklük): v^2 * Cd
var c = 0{,}1;
var speed = v.mag();
var dragMagnitude = c * speed * speed;
// Formülümüzün 2. parçası (yön): v unit vector * -1
var drag = velocity.get();
drag.normalize();
drag.mult(-1);
// Büyüklük ve yön birlikte!
drag.mult(dragMagnitude);
Bu kuvveti, bir eklemeyle
Mover
nesne türümüze uygulayalım. Kendi sürtünme örneğimizi yazdığımızda, sürtünme kuvveti her zaman mevcuttu. Bir nesne hareket ettiğinde, sürtünme onu yavaşlatırdı. Burada ortama bir öğe tanıtalım—Mover
nesnelerinin içinden geçtiği bir “sıvı”. Sıvı
nesnesi bir dikdörtgen olur ve konum, en, yükseklik, ve “çekme katsayısını”—yani nesnelerin içinden geçmesinin (hava gibi) kolay mı olduğunu veya (pekme gibi) zor mu olduğunu— bilir. Ayrıca, kendini ekranda çizmesi için bir fonksiyon (ve birazdan göreceğimiz gibi, iki fonksiyon daha) gerekir.var Liquid = function(x, y, w, h, c) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.c = c;
};
Liquid.prototype.display = function() {
noStroke();
fill(50);
rect(this.x, this.y, this.w, this.h);
};
Ana program şimdi yeni bir
Liquid
nesne örneği bildirecek ve başlatacaktır. Dikkat ederseniz, katsayı düşüktür (0,1), aksi takdirde nesne oldukça hızlı bir şekilde durur (bir gün istediğiniz etki bu olabilir).var liquid = new Liquid(0, height/2, width, height/2, 0{,}1);
Şimdi size ilginç bir soru:
Mover
nesnesinin Liquid
nesnesiyle konuşmasını nasıl sağlarız? Başka bir deyişle, aşağıdakini yürütmek istiyoruz:Bir hareketli bir sıvıdan geçerken bir çekme kuvveti deneyimler.
…veya nesne-tabanlı dilde konuşursak, (indeksi
i
olan, bir dizi Mover
nesnede döngü yaptığımızı varsayarsak):// Mover sıvının içinde mi?
if (liquid.contains(movers[i])) {
// Calculate drag force
var dragForce = liquid.calculateDrag(movers[i]);
// Apply drag force to Mover
movers[i].applyForce(dragForce);
}
Üstteki kod,
Liquid
nesne türüne iki fonksiyon eklememiz gerektiğini söyler: (1) bir Mover
nesnesinin Sıvı
nesnesinin içinde olup olmadığını belirleyen bir fonksiyon, ve (2) Mover
nesnesine uygulanan çekme kuvvetini hesaplayan bir fonksiyon.Birincisi kolaydır, konum vektörünün sıvının tanımladığı dikdörtgenin içinde olup olmadığını belirlemek için bir koşullu önerme kullanabiliriz.
Liquid.prototype.contains = function(m) {
var p = m.position;
return p.x > this.x && p.x < this.x + this.w &&
p.y > this.y && p.y < this.y + this.h;
};
drag()
fonksiyonu biraz daha karmaşıktır; ancak bunu zaten koda yazmıştık. Bu, formülümüzün bir uygulamasıdır. Çekme kuvveti, hızın ters yönünde, çekme katsayısı çarpı Mover
nesnesinin hızının karesine! eşittirLiquid.prototype.calculateDrag = function(m) {
// Magnitude is coefficient * speed squared
var speed = m.velocity.mag();
var dragMagnitude = this.c * speed * speed;
// Yön, süratin tersidir
var dragForce = m.velocity.get();
dragForce.mult(-1);
// Büyüklüğe göre ölçeklendir
// dragForce.setMag(dragMagnitude);
dragForce.normalize();
dragForce.mult(dragMagnitude);
return dragForce;
};
Bu iki fonksiyonu
Liquid
nesne türüne eklersek, hepsini bir programda birleştirmeye hazırız:Programı çalıştırdığınızda, suya düşen topları simüle ettiğimizi fark etmeniz gerekir. Nesneler, sadece (sıvıyı temsil eden) pencerenin altındaki gri alandan geçerken yavaşlar. Ayrıca, küçük nesnelerin büyük nesnelerden çok daha fazla yavaşladığını da fark edeceksiniz. Newton’un ikinci yasasını hatırlıyor musunuz?
A = F / M
. İvme, kuvvet bölü kütledir. Büyük nesneler daha az hızlanacaktır. Daha küçük bir nesne daha fazla hızlanır. Bu durumda, bahsettiğimiz ivme, çekmeye bağlı “yavaşlama”dır. Küçük nesneler, büyük olanlardan daha büyük oranda yavaşlayacaktı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.