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

۷-۲ اصطکاک

پیغام خطا

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).

اجازه بدهید مراحل خودمان با کار روی اصطکاک دنبال کنیم.

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

در زیر فرمول اصطکاک را می بینیم:

تصویر ۲-۳

حالا نوبت ماست که این فرمول را به دو بخش برای تشخیص جهت اصطکاک و اندازه آن تقسیم کنیم. بر اساس نمودار بالا، ما می توانیم نقاط اصطکاک که بر خلاف جهت سرعت هستند را ببینیم. در حقیقت، این بخش از فرمول است که û * -1 یا ۱- دفعه از بردار سرعت. در Processing ، این به معنای آن است که بردار سرعت را نرمال کنید و آن را در ۱- ضرب کنید.

 PVector friction = velocity.get();
friction.normalize();
friction.mult(-1);
 

به دو مرحله بیشتری که اینجا انجام شد توجه کنید. اول این مهم است که یک کپی از بردار سرعت ایجاد کنیم، برای اینکه ما نمی خواهیم که تصادفا جهت حرکت شی معکوس شود. دوم اینکه ما بردار را نرمال کرده ایم. دلیل آن این است که اندازه اصطکاک مرتبط با اندازه سرعت نیست، ما می خواهیم که با بردار اصطکاک با اندازه یک شروع کنیم که بشود به راحتی اندازه اش را زیاد کرد.

بر طبق فرمول، اندازه برابر است با μ * N . و μ ( عدد یونانی با تلفظ مُو)، در اینجا برای ضریب اصطکاک استفاده شده است. ضریب اصطکاک نیروی اصطکاک منحصر به فرد برای یک سطح است.

هرچقدر مقدار آن بیشتر باشد، نیروی اصطکاک بیشتر است و هر چقدر کمتر باشد نیروی آن کمتر است.برای مثال، یک قطعه یخ، اصطکاک خیلی کمتری از کاغذ سنباده دارد. تا وقتی در دنیای مجازی Processing هستیم، می توانیم این مقدار را به دلخواه بر روی هر اندازه ای که می خواهیم شبیه سازی کنیم مقدار دهی کنیم.

 float c = 0.01; 

حالا برای قسمت دوم: N. N به نیروی نرمال اشاره دارد. این نیرو، نیروی عمودی بر جسم است.

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


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

 float normal = 1; 

حالا که ما اندازه و جهت اصطکاک را داریم، می توانیم همه را در کنار هم قرار دهیم...

 float c = 0.01;
float normal = 1;
float frictionMag = c*normal;
 
PVector friction = velocity.get();
friction.mult(-1);
friction.normalize();
 
friction.mult(frictionMag);
 

... و آن را به مثال نیرو های خودمان اضافه کنیم. تا کنون اشیاء ما نیرو های باد و گرانش و را تجربه کرده بودند و حالا اصطکاک نیز به آن اضافه شده است:

بدون اصطکاک

با اصطکاک

مثال ۲-۴ - افزودن گرانش

 void draw() {
  background(255);
 
  PVector wind = new PVector(0.001,0);
  PVector gravity = new PVector(0,0.1);
 
  for (int i = 0; i < movers.length; i++) {
 
    float c = 0.01;
    PVector friction = movers[i].velocity.get();
    friction.mult(-1);
    friction.normalize();
    friction.mult(c);
 
    movers[i].applyForce(friction);
    movers[i].applyForce(wind);
    movers[i].applyForce(gravity);
 
    movers[i].update();
    movers[i].display();
    movers[i].checkEdges();
  }
 
} 

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

تمرین ۲-۴

چند بسته اصطکاک طراحی کنید، به شکلی که اشیاء تنها وقتی بر روی آنها رفتند اصطکاک را تجربه کنند. چه اتفاقی می افتد اگر اندازه ضریب اصطکاک های متفاوتی برای هر منطقه در نظر گرفته باشیم؟

چه اتفاقی می افتد اگر ما چند منطقه را طراحی کنیم که به جای این که سرعت را کاهش دهند آن را افزایش دهند؟

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