დავუბრუნდეთ ვინსტონს.
ახლა უკვე ორივე, x და y კოორდინატები გვაქვს ვინსტონის მდებარეობისთვის.
ახლა უკვე შეგვიძლია ვინსტონი ზემოთ-ქვემოთ ვახტუნაოთ
ძალიან კარგი.
ვნახოთ რას აკეთებს ეს კოდი სანამ განვაგრძობთ.
თავში გვაქვს x და y ცვლადები,
რომლებიც ვინსტონის ცენტრის მდებარეობას ინახავენ,
რასაც ამ ხაზში, ელიფსის დახატვისას ვიყენებთ.
შემდეგ, ვათავსებთ თვალებსა და პირს სახის ცენტრის მიხედვით.
ვაკლებთ ან ვუმატებთ x-ს და y-ს, რათა დავრწმუნდეთ,
რომ თვალები ნამდვილად 50 და 100 პიქსელითაა დაშორებული.
მაგალითად, პირი სახის ცენტრიდან 50 პიქსელით მარჯვნივაა
და ისევ სახის ცენტრიდან 40 პიქსელით ქვევით.
ვნახოთ კიდევ რისი შენახვა შეგვიძლია ცვლადების სახით.
ამისთვის, კოდის თითოეულ ხაზს გავარჩევ
და მოვძებნი ეგრეთ წოდებულ "მყარად კოდირებულ" რიცხვებს.
ეს უბრალოდ რიცხვებია.
არც ცვლადები არიან, არც მათზე დამოკიდებული.
ვნახოთ, აქ ელიფსის გამოძახებისას,
სიგრძე და სიგანე 300 და 300 გვაქვს.
ამის მაგივრად შეგვიძლია შევქმნათ ცვლადი faceSize.
ესეიგი faceSize = 300. ახლა შეგვიძლია faceSize აქ ჩავსვათ
და ის მნიშვნელობად 300-ს გადასცემს.
ძალიან კარგი, განვაგრძოთ.
აქ ყველაფერი იყენებს ან x-ს, ან y-ს, ან faceSize-ს,
თუმცა, აქ პირისთვის ისევ 150 გვაქვს სიგრძისთვისაც და სიგანისთვისაც.
შეგვიძლია შევქმნათ ცვლადი mouthSize და გავუტოლოთ 150-ს.
ესეიგი აქ mouthSize-ს ჩავწერთ, რომელიც 150-ს გადასცემს მნიშვნელობად,
რადგან ცვლადი ახლა ამას უდრის.
რადგან ასე მოვიქეცით, ახლა მარტივად შეგვიძლია შევცვალოთ faceSize,
ასევე მარტივად შეიცვლება mouthSize, შეგვიძლია ასე ვამოძრავოთ
და ცხადია, შეგვიძლია ისევ ვცვალოთ eyeSize.
ძალიან კარგი.
მაგრამ აქ რაღაც არ მომწონს. faceSize-ს ცვლილებისას,
მინდა ყველაფერი faceSize-ს მიხედვით იცვლებოდეს,
თუ სახე ასე დავაპატარავე, მინდა თვალები და პირიც ასევე დაპატარავდეს.
თუ faceSize გავანახევრე,
თვალებისა და პირის ზომებიც უნდა განახევრდეს.
სხვამხრივ, სასაცილო სურათს მივიღებთ,
რადგან თვალები და პირი ასეთი სახისთვის ზედმეტად დიდია,
ერთმანეთთან დაკავშირებულიც აღარ არიან.
ესეიგი გვინდა როგორმე mouthSize და eyeSize დამოკიდებული გავხადოთ faceSize-ზე.
დავუბრუნოთ საწყის მდგომარეობას.
ამისი გაკეთება ასე შეგვიძლია:
ეს ცვლადები faceSize-დან უნდა გამომდინარეობდეს,
ანუ, მაგალითად შეგვიძლია დავწეროთ: mouthSize = faceSize/2;
ანუ ვიყენებთ სახის ზომის ნაწილს.
მივუთითებთ, რომ ამ ზომის ნახევარი აიღოს --
-- თუ წილადები თქვენთვის უცხოა,
Khan Academy-ზე უამრავი ვიდეოა, რომელიც გიჩვენებთ თუ რა არის წილადები --
ახლა eyeSize შევცვალოთ. eyeSize დაახლოებით faceSize/4 არის.
იდეალური არაა, მაგრამ საკმაოდ კარგია.
-- შვიდი იყოს.. ასე ჯობს --
თუ თავიდან წილადი შეგეშალათ, შეგიძლიათ მოგვიანებით შეასწოროთ.
ითამაშეთ ამ რიცხვით სანამ რამე კარგად არ გამოვა.
თუ ახლა სახის ზომებს შევცვლით,
თვალებიც და პირიც მასთან ერთად შეიცვლება ზომაში.
ძალიან მაგარია..
მაგრამ რაღაც მაინც არასწორია.
როცა ზომები ძალიან მცირდება, თვალები და პირი შორდება სახეს.
ზომები სწორადაა, მაგრამ პრობლემაა დაშორება სახიდან.
აქ ასეთი რამ ხდება,
ელიფსებისთვის მდებარეობების მინიჭებისას,
გვაქვს x - 50 და y - 50 და შემდეგ x + 100 და y - 60,
ესეიგი სახის ზომა 50 პიქსელიც რომ იყოს,
თვალი მაინც 50 პიქსელით მარცხნივ იქნება ცენტრიდან,
რაც გამოიწვევს მის სახიდან მოშორებას.
ესეიგი გვჭირდება რომ 50-ის და 100-ის ნაცვლადაც faceSize-ს ნაწილები გვქონდეს.
მაშინ, როცა faceSize შეიცვლება, ის თავისმხრივ შეცვლის
პირისა და თვალების დაშორებას სახის ცენტრიდან.
მარცხენა თვალის მაგალითზე გიჩვენებთ რას ვგულისხმობ.
x მინუს 50 პიქსელი ნიშნავს სახის ცენტრიდან 50 პიქსელით მარცნივ ყოფნას.
ჩვენ წილადის გამოყენება გვინდა, ამიტომ მოდით ავიღოთ faceSize/6.
ანუ სახის ზომის მეექვსედი.
ძალიან კარგი, 50-იც შევცვალოთ faceSize/6-ით.
ახლა თუ შევცვლით ზომებს,
მარცხენა თვალი კარგად იქნება მოთავსებული.
-- მშვენიერი, თვალია ვინსტონ! მშვენიერი თვალი.. --
მეორე თვალსაც სჭირდება ცოტა დახმარება.
100-ის მაგივრად დავწეროთ faceSize/3, ანუ სახის ზომის მესამედი,
60-ს ადგილას კი იყოს სახის ზომის მეხუთედი, ანუ faceSize/5.
ძალიან კარგი, შევცვალოთ ზომა... მშვენიერია.
ახლა მხოლოდ პირთან გვაქვს პრობლემა.
გადავიდეთ პირზე.
ეს დაახლოებით faceSize/6 იქნება, ეს კი faceSize/7 იყოს.
კარგი, ახლა ყველაფერი პროპორციულადაა. შევამოწმოთ.
ახლა შეგვიძლია ვინსტონი ძალიან პატარა გავხადოთ,
თვალები და პირი კი მაინც მის სახეზე დარჩება!
დარწმუნებული ვარ ვინსტონი ამით ძალიან ბედნიერი უნდა იყოს.
გავიმეოროთ რა გავაკეთეთ.
თავიდან, გვაქვს გარკვეული ცვლადები.
ვიწყებთ ცვლადით, რომელიც უბრალოდ რიცხვ 200-ს ინახავს.
შემდეგ ვქმნით mouthSize და eyeSize ცვლადებს
და ვხდით მათ ზემოთა რიცხვზე დამოკიდებულს.
ანუ, თუ მაგალითად faceSize არის 200,
mouthSize იქნება 100,
მაგრამ თუ faceSize 300 გახდა,
mouthSize უცებ 150 გახდება.
ესეიგი ყველაფერი პროპორციულად იცვლება.
შემდეგ, ქვემოთ, ვითვლით თუ როგორი უნდა იყოს დაშორებები,
რისთვისაც ისევ წილადებს ვიყენებთ,
რადგან გვინდა, რომ დაშორებებიც სახის ზომის პროპორციულად იცვლებოდეს.
ფაქტობრივად, გვინდა რომ მხოლოდ ამ ერთ ცვლადს ჰქონდეს გავლენა ყველაფერზე.
ასეთი რაღაცების კეთება ცვალდებიან გამოსახულებებში შეგვიძლია.
რადგან გავიგეთ თუ როგორ შეიძლება ცვლადები სხვა ცვლადებზე იყონ დამოკიდებული,
ძალიან ბევრი რამ შეგვიძლია ჩვენს პროგრამებში.
მოდით აღვნიშნოთ და ვინსტონი ძალიან გავზარდოთ!