شما اینجا هستید

۸-۲ هوا و مقاومت سیال

پیغام خطا

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls در book_prev() (خط 775 در /home/molavy/public_html/modules/book/book.module).

 

تصویر ۲-۴

اصطکاک همچنین وقتی که جسم در گاز یا مایع قرار دارد نیز اتفاق می افتد. این نیرو نامهای زیادی دارد، اما همه آنها یک چیز هستند: نیروی چسبندگی، نیروی بازدارنده(کشش یا پسا هم به آن می گویند)، مقاومت سیال، اما سرانجام نتیجه همان چیزی است که ما در مثال های قبلی مثال دیده ایم( سرعت شی کم می شود)، فرمول محاسبه نیروی بازدارنده کمی متفاوت است. اجازه بدهید نگاهی به آن بیندازیم

خوب حالا بیایید این فرمول را بشکنیم و ببینیم که به چه چیز هایی برای شبیه سازی مناسب نیاز داریم، و یک فرمول ساده تر برای محاسبه پیدا کنیم.

 Fd : به نیروی بازدارنده اشاره دارد، مقداری که در نهایت می خواهیم محاسبه شود به و تابع اعمال نیرو ارسال گردد.

1/2- یک ثابت است: ۰.۵- .در دنیای Processing ما این موضوع کاملا بی معنی است، چون ما ممکن است هر مقدار دیگری را استفاده کنیم. اگرچه، این موضوع که این مقدار منفی است مهم است. به ما می گوید که این نیرو برخلاف مسیر سرعت جسم است( درست مثل اصطکاک).

 ρ حرف یونانی rho است، و به غلظت مایع اشاره دارد، چیزی که نیاز نیست درباره آن نیز نگران باشیم. می توانیم آن را ساده کنیم و مقدار ثابت یک در نظر بگیریم.

 v به سرعت حرکت شی اشاره دارد. خوب، این موضوع را فهمیدیم! سرعت اشیاء به اندازه بردار سرعت آن است:velocity.magnitude() و v2 تنها به معنای مربع v است یا v*v.

A به سطح جلوی شی که دربرابر مایع یا گاز قرار دارند اشاره دارد.برای مثال آیرودینامیک پراید باعث میشود که مقاومت کمتری از یک اتوبوس مکعب مستطیلی را شاهد باشد.

با اینحال، برای یک شبیه سازی ساده، ما فکر می کنیم که شی ما دایره ای است و این المان را نادیده می گیریم.

 Cd یک ضریب برای بازدارندگی است، درست مثل ضریب اصطکاک (ρ) این یک ثابت است که مشخص می کند که ما میخواهیم نیروی بازدارندگی قوی باشد یا ضعیف.

 

V آشنا به نظر نمی رسد؟ مثل این است که معنی بردار سرعت را می دهد. مثلا velocity.normalize. درست شبیه اصطکاک، بازدارندگی یک نیرو است که برخلاف جهت سرعت عمل می کند.

حالا که ما هر کدام از این اجزاء را بررسی کردیم و فهمیدیم ما نیاز به این داریم که یک شبیه سازی ساده داشته باشیم. می توانیم فرمول خود را به شکل زیر کوچک کنیم.



تصویر ۲-۵ فرمول ساده شده از نیروی بازدارندگی

 

یا

float c = 0.1;
float speed = v.mag();

	
//Part 1 of our formula (magnitude): Cd * v2

float dragMagnitude = c * speed * speed;

PVector drag = velocity.get();

	
//Part 2 of our formula (direction): -1 * velocity

drag.mult(-1);

drag.normalize();

	
//Magnitude and direction together!

drag.mult(dragMagnitude);

 

اجازه بدهید که این نیرو را به کلاس Mover خوب اضافه کنیم. وقتی ما مثال اصطکاک خود را می نوشتیم، نیروی اصطکاک همیشه وجود داشت. وقتی یک شی حرکت می کرد، اصطکاک سرعت آن را کم می کرد. در اینجا، اجازه بدهید که یک المان را به محیطمان معرفی کنیم--- یک مایع یک اشیاء متحرک ما از آن رد می شوند. شی مایع ما یک مستطیل خواهد بود تا بدانیم که موقعیتش کجاست.همچنین طول، عرض، و ضریب بازدارندگی آن چقدر است. برای مثال حرکت اشیاء در آن راحت است(مانند هوا) یا سخت است(مانند آب)؟ به علاوه، بهتر است که یک تابع داشته باشیم که بتواند این شی خودش را در صفحه ترسیم کند.( و دو تابع بیشتر، که ما در اینجا می بینیم).‌

 

class Liquid {
//The liquid object includes a variable defining its coefficient of drag.

float x,y,w,h;

  float c;
 
  Liquid(float x_, float y_, float w_, float h_, float c_) {
    x = x_;
    y = y_;
    w = w_;
    h = h_;
    c = c_;
  }
 
  void display() {
    noStroke();
    fill(175);
    rect(x,y,w,h);
  }
 
}

حالا یک سوال جالب به ذهن میرسد: چطور می توانیم کاری کنیم که شی Mover با شی Liquid صحبت کند.به عبارت دیگر، ما می خواهیم که چنین چیزی را اجرا کنیم:

وقتی که شی متحرک از مایع می گذرد نیروی بازدارنده را تجربه کند.

... یا اگر بخواهیم به صورت شی گرا صحبت کنیم( در نظر بگیرید که ما با یک حلقه از آرایه اشیاءٔ متحرک با ایندکس i داریم):

 

if (movers[i].isInside(liquid)) {

//If a Mover is inside a Liquid, apply the drag force.
movers[i].drag(liquid);

}



 

کد بالا به ما می گوید که ما نیاز به افزودن دو تابع به کلاس Mover داریم. ۱) یک تابع که تشخیص دهد یک شی Mover درون شی مایع است. و ۲) یک تابع که نیروی بازدارنده را محاسبه و به شی Mover اعمال کند.

اولی آسان است. ما می توانیم به سادگی از یک شرط برای تشخیص قرار داشتن شی درون مایع استفاده کنیم.

 

boolean isInside(Liquid l) {
  if (location.x>l.x && location.xl.y && location.y

+l.h)>+l.w>

تابع drag یک مقدار پیچیده تر است، اگرچه، ما قبلا این کد را نوشته بودیم. این یک پیاده سازی ساده از فرمول ماست. نیروی بازدارنده برابر ضریب بازدارندگی ضرب در مربع سرعت شی برخلاف جهت سرعت شی است!

 

void drag(Liquid l) {
 
    float speed = velocity.mag();
    float dragMagnitude = l.c * speed * speed;
 
    PVector drag = velocity.get();
    drag.mult(-1);
    drag.normalize();
 
    drag.mult(dragMagnitude);
 
    applyForce(drag);
  }

و با افزودن این دو تابع یه کلاس Mover، ما آماده قسمت اصلی قرار دهیم:

مثال ۲-۵ مقاومت جریان(برای تکرار حرکت روی مثال کلیک کنید)

Mover[] movers = new Mover[100];
 
Liquid liquid;
 
void setup() {
  size(360, 640);
  for (int i = 0; i < movers.length; i++) {
    movers[i] = new Mover(random(0.1,5),0,0);
  }
  liquid = new Liquid(0, height/2, width, height/2, 0.1);
}
 
void draw() {
  background(255);
 
  liquid.display();
 
  for (int i = 0; i < movers.length; i++) {
 
    if (movers[i].isInside(liquid)) {
      movers[i].drag(liquid);
    }
 
    float m = 0.1*movers[i].mass;
    PVector gravity = new PVector(0, m);
    movers[i].applyForce(gravity);
 
    movers[i].update();
    movers[i].display();
    movers[i].checkEdges();
  }
}

در اجرای این مثال، شما بهتر است به این نکته توجه کنید که ما افتادن شی در مایع را شبیه سازی کرده ایم.

اشیاء وقتی به قسمت خاکستری(برای نمایش مایع استفاده می شود) میرسند سرعتشان کم می شود. شما همچنین به این نکته توجه کرده اید که کاهش سرعت اشیاء کوچکتر بسیار بیشتر از اشیاء بزرگتر است.

قانون دوم نیوتن را به خاطر بیاورید؟ A= F/M. شتاب برابر است با نیرو تقسیم بر جرم. یک شی بزرگ شتاب کمتری میگیرد. یک شی کوچکتر شتاب بیشتری می گیرد. در این مثال، شتابی که در مورد آن صحبت می کنیم با نیروی بازدارنده کم می شود. اشیاء کوچکتر با نرخ بیشتری از اشیاء بزرگتر سرعت از دست می دهند.

تمرین ۲-۵

یک نگاه به فرمول ما برای بازدارندگی بیندازید:

نیروی بازدارنده = ضریب * سرعت* سرعت

هرچقدر سریعتر یک جسم حرکت کندنیروی بازدارنده بیشتری بر علیه آن اعمال می شود.در واقع یک شی بدون حرکت نیروی بازدارندگی را تجربه نمی کند. این مثال را با قرار دادن توپ ها در ارتفاع های مختلف امتحان کنید. این موضوع چه تاثیری در نیروی بازدارنده وقتی که شی به آب می رسد دارد؟

تمرین ۲-۶

فرمول بازدارندگی یک اندازه سطح هم دارد. می توانید افتادن یک شی در آب را بر اساس اندازه سمتی که آب با آن در آب می افتد شبیه سازی کنید.

تمرین ۲-۷ مقاومت مایع نه تنها بر خلاف بردار سرعت عمل می کند، بلکه عمود بر آن نیز عمل می کند. این موضوع به نام نیروی عمود بر جهت سرعت جریان بالاسری یا برا شناخته می شود و همین نیرو باعث حرکت یک هواپیما به بالهای زاویه دار به سمت بالا می شود. سعی کنید برخواستن هواپیما را شبیه سازی کنید.

دیدگاه جدیدی بگذارید