ძირითადი მასალა
კომპიუტერული პროგრამირება
კურსი: კომპიუტერული პროგრამირება > თემა 5
გაკვეთილი 4: ვექტორები- რა არის ვექტორი
- გამოწვევა: მოხეტიალე ვექტორი
- მეტი ვექტორული მათემატიკა
- გამოწვევა: ნათელდაშნა
- ვექტორის სიდიდე & ნორმალიზაცია
- გამოწვევა: სიდიდის ვიზუალიზაცია
- ვექტორების მოძრაობა
- გამოწვევა: მანქანის დამუხრუჭება
- სტატიკური ფუნქციები თუ პირველადი მეთოდები
- გამოწვევა: სტატიკური ფუნქციები
- ინტერაქტიული ვექტორების მოძრაობა
- გამოწვევა: გავედევნოთ მაუსს
- პროექტი: კომპიუტირებული არსებები
© 2023 Khan Academyგამოყენების პირობებიკონფიდენციალურობის პოლიტიკაშენიშვნა ქუქი-ჩანაწერებზე
სტატიკური ფუნქციები თუ პირველადი მეთოდები
სანამ ალგორითმ #3-ზე გადავალთ (აჩქარება მაუსის მიმართულებით), უნდა გავიაროთ ვექტორებთან და
PVector
ობიექტთან მუშაობის კიდევ ერთი ძალიან მნიშვნელოვანი ასპექტი: განსხვავება სტატიკური ფუნქციებისა და ნიმუშის მეთოდების გამოყენებას შორის.წამიერად დაივიწყეთ ვექტორები, შეხედეთ შემდეგ კოდს:
var x = 0;
var y = 5;
x = x + y;
საკმაოდ მარტივია, არა?
x
აქვს 0-ის მნიშვნელობა, მას ვამატებთ y
-ს და ახლა x
უდრის 5-ს. შესაბამისი კოდის დაწერა საკმაოდ ადვილად შეგვიძლია იმის მიხედვით, რაც PVector
-ზე ვისწავლეთ.var v = new PVector(0,0);
var u = new PVector(4,5);
v.add(u);
ვექტორ v-ს მნიშვნელობაა (0,0), ჩვენ ვუმატებთ მას u-ს და v ხდება (4,5)-ს ტოლი. მარტივია, არა?
მარტივი მათემატიკის სხვა მაგალითსაც შევხედოთ:
var x = 0;
var y = 5;
var z = x + y;
x
-ს აქვს 0-ის მნიშვნელობა, მას ვამატებთ y
-ს და შედეგს ვინახავთ ახალ ცვლადში z
. x
-ის მნიშვნელობა არ იცვლება ამ მაგალითში და არც y-ის! ეს შეიძლება, ტრივიალური და ინტუიციურია, როდესაც რიცხვებზე მათემატიკურ ოპერაციებზეა საუბარი. თუმცა, ეს არც ისე ცხადია მათემატიკურ ოპერაციებზე PVector
-ში. ვცადოთ კოდის დაწერა იმის მიხედვით, რაც ვიცით.var v = new PVector(0,0);
var u = new PVector(4,5);
var w = v.add(u); // არ მოტყუვდეთ; ეს არასწორია!!!
ეს შეიძლება, კარგ ვერსიას ჰგავს, მაგრამ
PVector
ობიექტი ასე არ მუშაობს. თუ შევხედავთ add()
-ის განსაზღვრებას...PVector.prototype.add = function(v) {
this.x = this.x + v.x;
this.y = this.y + v.y;
};
...ვხედავთ, რომ ეს კოდი ჩვენს მიზანს ვერ აღწევს. პირველ ყოვლისა, ის არ აბრუნებს ახალ
PVector
-ს (არ გვაქვს return
დებულება), და მეორე, ის ცვლის მნიშვნელობას PVector
-ისა, რომლის შემდეგაც ის არის გამოძახებული. იმისთვის, რომ დავამატოთ ორი PVector
ობიექტი და დავაბრუნოთ შედეგი ახალი PVector
-ის სახით, უნდა გამოვიყენოთ „სტატიკური“ add()
ფუნქცია."სტატიკური" ფუნქცია არის ფუნქცია, რომელიც განსაზღვრულია ობიექტზე, მაგრამ არ ცვლის ამ ობიექტის თვისებებს. მაშინ საერთოდ რატომ განვსაზღვრავთ მას ობიექტზე? მას რაღაც აკავშირებს ობიექტთან, ამიტომ ლოგიკურია მისი ობიექტზე მიბმა. ის ექცევა ობიექტს უფრო ისე, როგორც სახელთა სივრცეს (ინგლ. namespace). მაგალითად, ყველა სტატიკური ფუნქცია
PVector
-ზე ასრულებს რაიმე სახის მანიპულაციას გადაცემულ PVector
ობიექტებზე და ყოველთვის აბრუნებს რაღაც მნიშვნელობას. ამ ფუნქციების განსაზღვრა გლობალურადაც შეგვეძლო, მაგრამ ამ გზით თავს ვარიდებთ გლობალურ ფუნქციებს და გვაქვს ერთმანეთთან დაკავშირებული ფუნქციონალების დაჯგუფების უკეთესი გზები.შევადაროთ. აი, როგორ ვიყენებთ
add()
ნიმუშის მეთოდს:v.add(u);
კოდის ხაზი გადააკეთებდა
v
-ს, ამიტომ არ დაგვჭირდებოდა დაბრუნებული მნიშვნელობის დამახსოვრება. ამისგან განსხვავებით, აი, როგორ ვიყენებთ add()
სტატიკურ ფუნქციას:var w = PVector.add(v, u);
თუ ამ ფუნქციის შედეგს ცვლადში არ შევინახავდით, კოდის ეს ხაზი უვარგისი იქნებოდა, რადგან სტატიკური ვერსია არ ცვლის თვითონ ობიექტებს.
PVector
-ის სტატიკური ფუნქციები საშუალებას გვაძლევენ, PVector
ობიექტებზე განვახორციელოთ სტანდარტული მათემატიკური ოპერაციები რომელიმე შემომავალი PVector
-ის მნიშვნელობის ჩასწორების გარეშე.აი, როგორ დავწერდით
add()
-ის სტატიკურ ვერსიას:PVector.add = function(v1, v2) {
var v3 = new PVector(v1.x + v2.x, v1.y + v2.y);
return v3;
};
აქ რამდენიმე განსხვავებაა:
- ფუნქციას განვსაზღვრავთ პირდაპირ ობიექტზე, არა მის პროტოტიპზე
- არასდროს ვიყენებთ
this
საკვანძო სიტყვას ფუნქციის შიგნით - ფუნქციიდან ვაბრუნებთ მნიშვნელობას
PVector ობიექტს აქვს
add()
-ის, sub()
-ის, mult()
-ისა და div()
-ის სტატიკური ვერსიები. მას აგრეთვე აქვს დამატებითი სტატიკური ფუნქციები, რომლებიც არ არსებობენ როგორც ნიმუშის მეთოდები, როგორიცაა angleBetween()
, dot()
და cross()
. ჩვენ ამ მეთოდებს გამოვიყენებთ PVector
-ით პროგრამების შექმნის გაგრძელების დროს.ეს „ბუნებრივი სიმულაციების" კურსი ეფუძნება დანიელ შიფმენის წიგნს "კოდის ბუნებას", ის გამოყენებულია ლიცენზიით Creative Commons Attribution-NonCommercial 3,0 Unported License.
გსურთ, შეუერთდეთ დისკუსიას?
პოსტები ჯერ არ არის.