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

თუ ვებფილტრს იყენებთ, დარწმუნდით, რომ *.kastatic.org და *.kasandbox.org დომენები არ არის დაბლოკილი.

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

კომპიუტერული პროგრამირება

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

როგორც ვხედავთ, გამრავლება და გაყოფა არის ოპერაციები, რომელთა შედეგადაც შეგვიძლია, შევცვალოთ ვექტორის სიგრძე მისი მიმართულების ცვლილების გარეშე. ალბათ, ფიქრობთ: „კარგი, როგორ გავიგო, რა სიგრძისაა ვექტორი? ვიცი კომპონენტები (x და y), მაგრამ რა სიგრძე აქვს (პიქსელებში) ისარს?" ვექტორის სიგრძის (ინგლ. magnitude) გამოთვლის გაგება არის ძალიან საჭირო და მნიშვნელოვანი.
ფიგურა 1,10: ვექტორ v, with, vector, on top-ს სიგრძეს ხშირად წერენ შემდეგნაირად: vertical bar, vertical bar, v, with, vector, on top, vertical bar, vertical bar
ნახეთ, ზემოთ მოცემულ პროგრამაში ვექტორი, რომელიც დახატულია ისრად და ორ კომპონენტად (x და y), როგორ ქმნის მართკუთხა სამკუთხედს. კათეტები არის კომპონენტები, ჰიპოტენუზა კი თვითონ ისარია. ძალიან გაგვიმართლა, რომ ეს მართკუთხა სამკუთხედი გვაქვს, რადგან, ერთხელ, ბერძენმა მათემატიკოსმა პითაგორამ შექმნა ფორმულა, რომლითაც აღწერა მართკუთხა სამკუთხედის კათეტებისა და ჰიპოტენუზის დამოკიდებულება.
პითაგორას თეორემა არის: a-ს კვადრატს პლუს b-ს კვადრატი ტოლია c-ს კვადრატის.
ამ ფორმულით შეიარაღებულებს ახლა შეგვიძლია, v, with, vector, on top-ს სიგრძე გამოვთვალოთ შემდეგნაირად:
vertical bar, vertical bar, v, with, vector, on top, vertical bar, vertical bar, equals, square root of, v, start subscript, x, end subscript, times, v, start subscript, x, end subscript, plus, v, start subscript, y, end subscript, times, v, start subscript, y, end subscript, end square root
აქედან გამომდინარე, PVector ობიექტში დასაიმპლემენტირებელი კოდი იქნებოდა:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
შემდეგი მაგალითი ვიზუალურად ასახავს ვექტორის სიგრძეს ზემოთ მოცემული ზოლით:
ვექტორის სიგრძის გამოთვლა მხოლოდ დასაწყისია. სიგრძის ფუნქცია მრავალ შესაძლებლობას აჩენს, პირველი მათგანი არის ნორმალიზაცია. ნორმალიზაციაში იგულისხმება პროცესი, რომელიც რაიმეს „სტანდარტულად" ან „ნორმალურად" აქცევს. ვექტორების შემთხვევაში დავუშვათ, რომ სტანდარტულ ვექტორს ჰქონდეს 1-ის ტოლი სიგრძე. შესაბამისად, ვექტორის ნორმალიზაციისთვის დაგვჭირდება ნებისმიერი სიგრძის ვექტორის აღება, მისი მიმართულების შენარჩუნება და მისი სიგრძის 1-ად გადაქცევა, ამით ის გადაიქცევა ე.წ. ერთეულოვან ვექტორად.
ვინაიდან ის აღწერს ვექტორის მიმართულებას სიგრძის გათვალისწინების გარეშე, გამოგვადგება მზა ერთეულოვანი ვექტორის ქონა. ეს მაშინვე დაგვჭირდება, როგორც კი მუშაობას დავიწყებთ ძალებთან შემდეგ სექციაში.
ნებისმიერი მოცემული u, with, vector, on top ვექტორისთვის მისი ერთეულოვანი ვექტორი (u, with, hat, on top) გამოითვლება შემდეგნაირად:
u, with, hat, on top, equals, start fraction, u, with, vector, on top, divided by, vertical bar, vertical bar, u, with, vector, on top, vertical bar, vertical bar, end fraction
სხვა სიტყვებით, ვექტორის ნორმალიზებისთვის უბრალოდ გაყავით თითოეული კომპონენტი მის სიგრძეზე. ეს საკმაოდ ინტუიციურია. ვთქვათ, ვექტორს აქვს სიგრძე 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.

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

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