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

Hava ve sıvı direnci

Bir düzlemin etrafındaki sıvı direncinin şeması
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:
Fd=12ρv2ACdv^
Ş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.
  • Fd 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 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, v2, v kare veya vv 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.
  • Cd ç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^ 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:
Basitleştirilmiş formül: F_çekme = ||v^2|| * c_d * v - 1
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şittir
Liquid.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.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.