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

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

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

Ինտերակտիվ վեկտորի շարժում

Այս բաժինն ավարտելու համար փորձենք ավելի բարդ ու նաև ավելի օգտակար ծրագիր գրել։ Այժմ կփորձենք ըստ Ալգորիթմ #3-ի կանոնի՝ դեպի մկնիկ արագացման, դինամիկ կերպով օբյեկտի արագացումը հաշվել։
Դեպի մկնիկ արագացման վեկտորի դիագրամ
Որևէ կանոնից կամ բանաձևից ելնելով վեկտոր հաշվելու համար պետք է երկու մեծություն հաշվենք՝ երկարություն և ուղղություն։ Սկսենք ուղղությունից։ Գիտենք, որ արագացման վեկտորն ուղղված է օբյեկտից դեպի մկնիկի ընթացիկ դիրք։ Ենթադրենք, որ օբյեկտի դիրքը (x,y) կետն է, իսկ մկնիկինը՝ (mouseX,mouseY)։
dx-ի ու dy-ի դիագրամ
Այս դիագրամում տեսանելի է, որ (dx,dy) վեկտորը ստանալու համար պետք է մկնիկի դիրքից հանենք օբյեկտի դիրքը.
  • dx = mouseX - x
  • dy = mouseY - y
Այժմ նույն բանը գրենք PVector-ի գրելաձևով։ Եթե ենթադրենք, որ Mover օբյեկտի սահմանման մեջ ենք կոդը գրում և PVector օբյեկտի դիրքին հասանելիություն ունենք, ապա կարող ենք գրել հետևյալը.
var mouse = new PVector(mouseX, mouseY);
// Ուշադրություն դարձրու, որ ստատիկ sub() մեթոդն ենք կիրառում, քանի որ նոր PVector ենք ուզում ստանալ
var dir = PVector.sub(mouse, position);
Այժմ ունենք օբյեկտի դիրքից դեպի մկնիկ ուղղված PVector։ Եթե հենց այս պահին վեկտորն արագացներ օբյեկտը, այն միանգամից կհայտնվեր մկնիկի մոտ։ Իհարկե, բավականին անհետաքրքիր անիմացիա կստացվեր, դրա համար հիմա կփորձենք հասկանալ, թե ինչ արագացմամբ օբյեկտը շարժվի դեպի մկնիկը։
Արագացման PVector-ի երկարությունը որոշելու համար, անկախ իրական երկարությունից, պետք է սկզբում այն ___։ Ճիշտ է, գուշակերցիր, պետք է նորմավորենք։ Եթե կարողանանք այդ վեկտորը միավոր վեկտոր դարձնել (1 միավորի երկարություն ունեցող), կունենանք ուղղությունը ցույց տվող վեկտոր, որի չափերը շատ հեշտ կարելի է փոխել. չէ՞ որ 1-ն ինչով բազմապատկես, այդ թիվն էլ կստանաս։
var anything = ??;
dir.normalize();
dir.mult(anything);
Այսինքն՝ կատարում ենք հետևյալ քայլերը.
  1. Հաշվում ենք օբյեկտի դիրքից դեպի մեր ուզած դիրք՝ մկնիկի ընթացիկ դիրք, ուղղված վեկտոր.
  2. Նորմավորում ենք վեկտորը՝ երկարությունը դարձնում ենք 1.
  3. Փոխում ենք վեկտորի երկարությունը համապատասխան չափով՝ այն բազմապատկելով այդ արժեքով,
  4. Ստացված վեկտորը փոխանցում արագացմանը։
Այդ քայլերի կիրառումից հետո կստանանք այսպիսի ծրագիր.
Միգուցե փորձում ես հասկանալ, թե ինչու շրջանը չի կանգնում մկնիկին հասնելիս։ Հասկանալու համար հաշվի առ, որ օբյեկտը տեղյակ չէ, որ ինչ-որ տեղում պետք է կանգ առնի։ Այն միայն գիտի, թե ուր պետք է գնա և փորձում էհնարավորինս շուտ հասնել այնտեղ։ Դրա արդյունքում այն հասնելուց հետո անցնում է իր թիրախը, հետո հետ պտտվում և կրկին փորձում հնարավորինս արագ տեղ հասնել և այդպես շարունակ։ Հետագա բաժիններում կսովորենք, թե ինչպես կարող ենք ծրագիր գրել, որտեղ օբյեկտը կկարողանա ինչ-որ տեղ հասնել՝ մոտենալուց դանդաղել։ Այնպես որ, շարունակիր սովորել։
Այս օրինակը շատ նման է գրավիտացիոն ձգողությանը, որտեղ մկնիկը ձգում է օբյեկտին։ Հաջորդ բաժնում գրավիտացիոն ձգողականությունն ավելի մանրամասն կքննարկենք։ Այնուամենայնիվ, այս ծրագիրը դրանից տարբերվում է մի բանով. ձգման ուժը՝ արագացման երկարությունը, հակադարձ համեմատական է։ Այսինքն՝ օբյեկտը մկնիկին ինչքան մոտենա, այդքան կարագանա։
Դիտարկիր այս օրինակը, որտեղ մեկ շարժվող գնդի փոխարեն շարժվող գնդերի մի ամբողջ զանգված է։

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

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

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