თუ თქვენ ხედავთ ამ შეტყობინებას, ესე იგი საიტზე გარე რესურსების ჩატვირთვისას მოხდა შეფერხება.

If you're behind a web filter, please make sure that the domains *.kastatic.org and *.kasandbox.org are unblocked.

ძირითადი მასალა

ვექტორის სიდიდე & ნორმალიზაცია

როგორც ვხედავთ, გამრავლება და გაყოფა არის ოპერაციები, რომელთა შედეგადაც შეგვიძლია, შევცვალოთ ვექტორის სიგრძე მისი მიმართულების ცვლილების გარეშე. ალბათ, ფიქრობთ: „კარგი, როგორ გავიგო, რა სიგრძისაა ვექტორი? ვიცი კომპონენტები (x და y), მაგრამ რა სიგრძე აქვს (პიქსელებში) ისარს?" ვექტორის სიგრძის (ინგლ. magnitude) გამოთვლის გაგება არის ძალიან საჭირო და მნიშვნელოვანი.
ფიგურა 1,10: ვექტორ v-ს სიგრძეს ხშირად წერენ შემდეგნაირად: ||v||
ნახეთ, ზემოთ მოცემულ პროგრამაში ვექტორი, რომელიც დახატულია ისრად და ორ კომპონენტად (x და y), როგორ ქმნის მართკუთხა სამკუთხედს. კათეტები არის კომპონენტები, ჰიპოტენუზა კი თვითონ ისარია. ძალიან გაგვიმართლა, რომ ეს მართკუთხა სამკუთხედი გვაქვს, რადგან, ერთხელ, ბერძენმა მათემატიკოსმა პითაგორამ შექმნა ფორმულა, რომლითაც აღწერა მართკუთხა სამკუთხედის კათეტებისა და ჰიპოტენუზის დამოკიდებულება.
პითაგორას თეორემა არის: a-ს კვადრატს პლუს b-ს კვადრატი ტოლია c-ს კვადრატის.
ამ ფორმულით შეიარაღებულებს ახლა შეგვიძლია, v-ს სიგრძე გამოვთვალოთ შემდეგნაირად:
||v||=vxvx+vyvy
აქედან გამომდინარე, PVector ობიექტში დასაიმპლემენტირებელი კოდი იქნებოდა:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
შემდეგი მაგალითი ვიზუალურად ასახავს ვექტორის სიგრძეს ზემოთ მოცემული ზოლით:
ვექტორის სიგრძის გამოთვლა მხოლოდ დასაწყისია. სიგრძის ფუნქცია მრავალ შესაძლებლობას აჩენს, პირველი მათგანი არის ნორმალიზაცია. ნორმალიზაციაში იგულისხმება პროცესი, რომელიც რაიმეს „სტანდარტულად" ან „ნორმალურად" აქცევს. ვექტორების შემთხვევაში დავუშვათ, რომ სტანდარტულ ვექტორს ჰქონდეს 1-ის ტოლი სიგრძე. შესაბამისად, ვექტორის ნორმალიზაციისთვის დაგვჭირდება ნებისმიერი სიგრძის ვექტორის აღება, მისი მიმართულების შენარჩუნება და მისი სიგრძის 1-ად გადაქცევა, ამით ის გადაიქცევა ე.წ. ერთეულოვან ვექტორად.
ვინაიდან ის აღწერს ვექტორის მიმართულებას სიგრძის გათვალისწინების გარეშე, გამოგვადგება მზა ერთეულოვანი ვექტორის ქონა. ეს მაშინვე დაგვჭირდება, როგორც კი მუშაობას დავიწყებთ ძალებთან შემდეგ სექციაში.
ნებისმიერი მოცემული u ვექტორისთვის მისი ერთეულოვანი ვექტორი (u^) გამოითვლება შემდეგნაირად:
u^=u||u||
სხვა სიტყვებით, ვექტორის ნორმალიზებისთვის უბრალოდ გაყავით თითოეული კომპონენტი მის სიგრძეზე. ეს საკმაოდ ინტუიციურია. ვთქვათ, ვექტორს აქვს სიგრძე 5. 5 გაყოფილი 5-ზე არის 1. შევხედოთ ჩვენს მართკუთხა სამკუთხედს, ჰიპოტენუზას ზომა უნდა შევუცვალოთ 5-ზე გაყოფით. ამ პროცესში მცირდება გვერდებიც, ისინიც 5-ზე იყოფა.
შესაბამისად, PVector ობიექტში ვწერთ ნორმალიზაციის ფუნქციას შემდეგნაირად:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
რა თქმა უნდა, არის პატარა პრობლემა. რა მოხდება, თუ ვექტორის სიგრძე 0-ის ტოლია? ნულზე ვერ გავყოფთ! ამას შეცდომის სწრაფად შემოწმება მოაგვარებს:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
აი, პროგრამა, რომელშიც ყოველთვის ვუკეთებთ ნორმალიზაციას ვექტორს, რომელიც წარმოადგენს მაუსის ადგილმდებარეობას ცენტრიდან (და შემდეგ ვამრავლებთ მას, რათა შევძლოთ მისი ნახვა, რადგან 1 პიქსელი ძალიან პატარაა!):
ეს „ბუნებრივი სიმულაციების" კურსი ეფუძნება დანიელ შიფმენის წიგნს "კოდის ბუნებას", ის გამოყენებულია ლიცენზიით Creative Commons Attribution-NonCommercial 3,0 Unported License.

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.