ძირითადი მასალა
კომპიუტერული პროგრამირება
კურსი: კომპიუტერული პროგრამირება > თემა 5
გაკვეთილი 4: ვექტორები- რა არის ვექტორი
- გამოწვევა: მოხეტიალე ვექტორი
- მეტი ვექტორული მათემატიკა
- გამოწვევა: ნათელდაშნა
- ვექტორის სიდიდე & ნორმალიზაცია
- გამოწვევა: სიდიდის ვიზუალიზაცია
- ვექტორების მოძრაობა
- გამოწვევა: მანქანის დამუხრუჭება
- სტატიკური ფუნქციები თუ პირველადი მეთოდები
- გამოწვევა: სტატიკური ფუნქციები
- ინტერაქტიული ვექტორების მოძრაობა
- გამოწვევა: გავედევნოთ მაუსს
- პროექტი: კომპიუტირებული არსებები
© 2023 Khan Academyგამოყენების პირობებიკონფიდენციალურობის პოლიტიკაშენიშვნა ქუქი-ჩანაწერებზე
ვექტორის სიდიდე & ნორმალიზაცია
როგორც ვხედავთ, გამრავლება და გაყოფა არის ოპერაციები, რომელთა შედეგადაც შეგვიძლია, შევცვალოთ ვექტორის სიგრძე მისი მიმართულების ცვლილების გარეშე. ალბათ, ფიქრობთ: „კარგი, როგორ გავიგო, რა სიგრძისაა ვექტორი? ვიცი კომპონენტები (
x
და y
), მაგრამ რა სიგრძე აქვს (პიქსელებში) ისარს?" ვექტორის სიგრძის (ინგლ. magnitude) გამოთვლის გაგება არის ძალიან საჭირო და მნიშვნელოვანი.ნახეთ, ზემოთ მოცემულ პროგრამაში ვექტორი, რომელიც დახატულია ისრად და ორ კომპონენტად (
x
და y
), როგორ ქმნის მართკუთხა სამკუთხედს. კათეტები არის კომპონენტები, ჰიპოტენუზა კი თვითონ ისარია. ძალიან გაგვიმართლა, რომ ეს მართკუთხა სამკუთხედი გვაქვს, რადგან, ერთხელ, ბერძენმა მათემატიკოსმა პითაგორამ შექმნა ფორმულა, რომლითაც აღწერა მართკუთხა სამკუთხედის კათეტებისა და ჰიპოტენუზის დამოკიდებულება.პითაგორას თეორემა არის: a-ს კვადრატს პლუს b-ს კვადრატი ტოლია c-ს კვადრატის.
ამ ფორმულით შეიარაღებულებს ახლა შეგვიძლია, v, with, vector, on top-ს სიგრძე გამოვთვალოთ შემდეგნაირად:
აქედან გამომდინარე,
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) გამოითვლება შემდეგნაირად:
სხვა სიტყვებით, ვექტორის ნორმალიზებისთვის უბრალოდ გაყავით თითოეული კომპონენტი მის სიგრძეზე. ეს საკმაოდ ინტუიციურია. ვთქვათ, ვექტორს აქვს სიგრძე 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.
გსურთ, შეუერთდეთ დისკუსიას?
პოსტები ჯერ არ არის.