If you're seeing this message, it means we're having trouble loading external resources on our website.

Եթե գտնվում ես վեբ զտիչի հետևում, խնդրում ենք համոզվել, որ *.kastatic.org և *.kasandbox.org տիրույթները հանված են արգելափակումից։

Հիմնական նյութ

Օդի ու հեղուկի դիմադրությունը

Հարթության մեջ հեղուկի դիմադրության պատկեր
Շփման ուժ է առաջանում նաև երբ հեղուկի կամ գազի մեջով առարկա է անցնում։ Այդ ուժը բազմաթիվ անվանումներ ունի՝ մածուցիկության ուժ, քարշի ուժ, հեղուկի դիմադրություն, սակայն բոլորը նույն բանն են նշանակում։ Ծրագրի արդյունքում մեր առարկան կրկին կդանդաղի, ինչպես նախորդ օրինակներում, սակայն քարշի ուժի հաշվարկը տարբեր կլինի։ Դիտարկենք նոր բանաձևը.
Fd=12ρv2ACdv^
Այժմ բանաձևը մասերի բաժանենք ու հասկանանք՝ ProcessingJS-ի լավ նմանակիչ ստանալու համար մեզ որ բաղադրիչներն են պետք, որպեսզի ավելի պարզ բանաձև ստանանք։
  • Fd-ն քարշի ուժն է, այն վեկտորը, որը ցանկանում ենք հաշվել և փոխանցել applyForce() ֆունկցիային։
  • -1/2-ը հաստատուն է՝ -0,5։ Հաստատունի արժեքը ProcessingJS-ի աշխարհում առանձնապես կարևոր չէ, քանի որ այլ հաստատունների արժեքներն ինքներս ենք ստեղծելու։ Այնուամենայնիվ, հաստատունի բացասական նշանը կարևոր է, քանի որ այն ցույց է տալիս, որ այս ուժն ուղղված է արագության վեկտորին հակառակ այնպես, ինչպես շփման ուժը։
  • ρ-ն հունական ռո տառն է, նկարագրում է հեղուկի խտությունը, որն այս պահին կարևոր չէ. խնդիրը պարզեցնելու համար կարող ենք ենթադրել, որ խտությունը 1 է։
  • v-ն շարժվող մարմնի արագությունն է։ Սա կարևոր է։ Առարկայի արագությունը արագության վեկտորի երկարությունն է՝ velocity.mag()։ Իսկ v2-ին ընդամենը նշանակում է v-ն՝ քառակուսի աստիճան բարձրացրած, կամ vv.
  • A-ն հեղուկի կամ գազի միջով անցնող առարկայի ճակատային մակերեսն է։ Օրինակ՝ աերոդինամիկ «Լամբորջինիի. վրա ավելի փոքր օդի դիմադրություն կգործադրվի, քան մեծ «Վոլվոյի»։ Այնուամենայնիվ, կարող ենք պարզ նմանակչում այս բաղադրիչից ազատվել՝ ենթադրելով, որ բոլոր առարկաները գնդեր են։
  • Cd-ն քարշի գործակիցն է, ունի շփման գործակցի՝ μ-ի դերը։ Այս գործակցի արժեքը կորոշենք՝ ըստ մեր ցանկության՝ ուժեղ, թե թույլ քարշի ուժ ենք ուզում։
  • v^-ն ծանոթ է, չէ՞։ Սա արագության միավոր վեկտորն է՝ velocity.normalize()։ Քարշի ուժը այս վեկտորի հակառակ ուղղությամբ է ուղղված։
Քանի որ արդեն քննարկել ենք բոլոր բաղադրիչները և հասկացել ենք՝ պարզ նմանակչի համար որոնք են պետք, կարող ենք ստանալ պարզեցված բանաձևը.
Պարզեցված բանաձև՝ F_drag = ||v^2|| * c_d * v - 1
կամ՝
// Բանաձևի առաջին մաս՝ երկարություն. v^2 * Cd
var c = 0{,}1;
var speed = velocity.mag();
var dragMagnitude = c * speed * speed;

// Բանաձևի երկրորդ մաս՝ ուղղություն. v միավոր վեկտոր * -1 
var drag = velocity.get();
drag.normalize();
drag.mult(-1);

// Ուղղությունն ու երկարությունն իրար հետ
drag.mult(dragMagnitude);
Մի բան էլ ավելացնենք ու այս ուժը կիրառենք Mover օբյեկտում։ Շփման ուժի օրինակն այնպես գրեցինք, որ շփման ուժը միշտ գործադրվեր. երբ մարմինը շարժվում էր, շփման ուժն առկա էր։ Այս օրինակում կարող ենք միջավայրում նոր տարր ավելացնել՝ հեղուկ, որի միջով անցնում է Mover օբյեկտը։ Liquid օբյեկտը կլինի ուղղանկյուն, կիմանա իր դիրքը, երկարությունը, լայնությունն ու քարշի գործակիցը, այսինքն՝ դրա միջով հե՞շտ է անցնել, ինչպես օդի մեջով, թե դժվար։ Դրանից բացի, այն պետք է ունենա էկրանի վրա ինքն իրեն նկարելու ֆունկցիա և ևս երկու ֆունկցիա, որոնք շուտով կպարզենք։
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);
};
Հիմնական ծրագիրն արդեն սահմանում է Liquid օբյեկտի նոր օրինակ և նախնական արժեքներ փոխանցում։ Ուշադրություն դարձրու, որ գործակիցը փոքր է (0․1)։ Եթե մեծ լիներ, առարկան բավականին արագ կանգ կառներ. միգուցե մի օր հենց դա կլինի քո ուզածը։
var liquid = new Liquid(0, height/2, width, height/2, 0{,}1);
Քննարկենք մի հետաքրքիր հարց. ինչպե՞ս անենք, որ Mover և Liquid օբյեկտներն իրար հետ կապ ունենան։ Այլ կերպ ասած՝ ցանկանում ենք կատարել հետևյալը.
Հեղուկի մեջով անցնելիս առարկայի վրա քարշի ուժ գործադրվեց։
…կամ ձևակերպված ավելի օբյեկտային կողմնորոշվածության տերմիններով՝ ենթադրելով, որ i ցուցիչով Mover օբյեկտների զանգվածի միջով ենք անցնում.
// Առարկան հեղո՞ւկ է
if (liquid.contains(movers[i])) {
    // Հաշվիր քարշի ուժը
    var dragForce = liquid.calculateDrag(movers[i]);
    // Առարկայի վրա քարշի ուժ  գործադրիր
    movers[i].applyForce(dragForce);
}
Ըստ այս կոդի՝ պետք է Liquid օբյեկտի տեսակում ևս երկու ֆունկցիա ավելացնենք. (1) ֆունկցիա, որը որոշում է՝ Mover օբյեկտը Liquid օբյեկտի մեջ է, թե ոչ, և (2) ֆունկցիա, որը Mover օբյեկտի վրա գործադրված քարշի ուժն է հաշվում։
Առաջինը բավականին հեշտ է. պետք է ընդամենը մեկ պայման գրել՝ ճշտելու՝ արդյոք դիրքի վեկտորը հեղուկի սահմանած ուղղանկյան մեջ է, թե ոչ։
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() ֆունկցիան մի փոքր ավելի բարդ է։ Այնուամենայնիվ, կոդն արդեն գրել ենք. այն մեր բանաձևի պարզ կիրառումն է։ Քարշի ուժը հավասար է արագության հակառակ ուղղությամբ՝ քարշի գործակցի ու Mover օբյեկտի արագության քառակուսու արտադրյալին ։
Liquid.prototype.calculateDrag = function(m) {
  // Երկարությունը հավասար է գործակից * արագության քառակուսի
  var speed = m.velocity.mag();
  var dragMagnitude = this.c * speed * speed;

  // Ուղղությունը արագության հակառակն է
  var dragForce = m.velocity.get();
  dragForce.mult(-1);

  // Ըստ երկարության՝ փոխում ենք չափը
  dragForce.normalize();
  dragForce.mult(dragMagnitude);
  return dragForce;
};
Liquid օբյեկտի տեսակին այս երկու ֆունկցիաներն ավելացնելուց հետո կարող ենք մեր ծրագիրն ամբողջացնել.
Ծրագիրը կատարելիս կնկատես, որ ջրի մեջ ընկնող գնդակներ ենք նմանակել։ Առարկաները դանդաղում են միայն էկրանի ներքևի հատվածում ջուրը ներկայացնող կապույտ հատվածը հատելիս։ Կնկատես նաև, որ փոքր առարկաներն ավելի շատ են դանդաղում, քան մեծերը։ Հիշո՞ւմ ես Նյուտոնի երկրորդ օրենքը՝ A = F / M. արագացումը հավասար է ուժը բաժանած զանգվածի վրա։ Այսինքն՝ մեծ առարկան ավելի քիչ կարագանա, իսկ փոքր առարկան՝ ավելի շատ։ Այս դեպքում արագացումը քարշի ուժի պատճառով դանդաղացումն է։ Հետևաբար, փոքր առարկաներն ավելի շատ կդանդաղեն, քան մեծերը։

«Բնական նմանակիչներ» դասընթացը ստեղծվել է Դանիել Շիֆմանի «Կոդի բնույթը» գրքի հիման վրա և կիրառվում է ըստ Creative Commons Attribution-NonCommercial 3,0 Unported License-ի։

Ուզո՞ւմ ես միանալ խոսակցությանը։

Առայժմ հրապարակումներ չկան։
Անգլերեն հասկանո՞ւմ ես: Սեղմիր այստեղ և ավելի շատ քննարկումներ կգտնես «Քան» ակադեմիայի անգլերեն կայքում: