دگرگونسازی جهان — چگونه اشیا را چرخش دهیم؟ آموزش و یادگیری دگرگونسازی جهان — چگونه اشیا را چرخش دهیم؟ به صورت رایگان
توی ترد قبلی به این پرداختیم که چجوری آبجکت هارو حرکت بدیم.
و توی حرکت یاد گرفتیم، همهی ورتکس ها به یک اندازه جابهجا میشن و در نتیجه شکل مثلث همون شکل قبلی باقی میمونه، فقط جای اون تغییر میکنه.
ولی اگه بخوایم همین مثلث رو بچرخونیم چطور؟
اینجا دیگه نمیتونیم مثل حرکت، یک Vector ثابت رو به همهی ورتکس ها اضافه کنیم.
چون این بار هدفمون تغییر جهت و زاویهی Object هست.
Rotation یعنی چی؟
Rotation یعنی تغییر دادن جهت یک آبجکت با چرخش اون حول یک نقطه یا محور مشخص.
برای اینکه سادهتر ببینیم چه اتفاقی میوفته، یک نقطه رو در نظر می گیریم.
فرض کنید:
A = (1, 0)
و (0, 0) Origin رو مرکز چرخش در نظر بگیریم.
اگر A رو ۹۰ درجه بچرخونیم:

نقطه A از موقعیت (1,0) میوفته روی موقعیت (1, 0) :
A’ = (0, 1)
اما چطور چرخش های پیچیده رو حساب کنیم؟
اینجا باید کمی ریاضی وارد ماجرا کنیم.
فرمول چرخش تو محیط دو بعدی
فرض کنید نقطهی ما:
P = (x, y) باشه
و بخوایم اون رو به اندازهی زاویهی θ حول Origin بچرخونیم.
مختصات جدیدش:
x’ = x cos(θ) - y sin(θ)
y’ = x sin(θ) + y cos(θ)
به عنوان نمونه:
P = (1, 0)
و:
θ = 90°
داریم:
cos(90°) = 0
sin(90°) = 1
پس:
x’ = 1(0) - 0(1) = 0
y’ = 1(1) + 0(0) = 1
بنابراین:
P’ = (0, 1)
حالا یک شکل مثل مثلث رو چطور بچرخونیم؟
مثلث ما از سه ورتکس تشکیل شده:
A
B
C
اگر بخوایم برای مثال، کل مثلث رو حول موقعیت (0, 1)B به اندازه منفی ۹۰ درجه بچرخونیم، باید همین چرخش رو روی هر سه ورتکس اعمال کنیم.

پس دوباره به همون ایدهی قبلی برمیگردیم:
Geometry ما از چندین ورتکس تشکیل شده؛ بنابراین برای تغییر موقعیت Geometry، در نهایت داریم موقعیت ورتکس ها رو تغییر میدیم.
تا اینجا تو فضای دو بعدی کار کردیم.
در فضای دو بعدی، چرخش حول یک نقطه انجام میشه.
اما در فضای سه بعدی، یک آبجکت میتونه حول محورهای مختلف بچرخه.
مثل حول محور X ،Y یا Z.
پس وقتی میگیم:
«آبجکت رو ۹۰ درجه چرخش بده.»
هنوز یک چیز مهم رو مشخص نکردیم.
حول کدوم محور؟
چرخش ۹۰ درجه حول X با چرخش ۹۰ درجه حول Y نتیجه کاملا متفاوتی دارن.
Rotation در 3D
برای توصیف یک Rotation در فضای سهبعدی، حداقل باید بدونیم:
Axis : حول کدوم محور بچرخیم؟
Angle : چقدر بچرخیم؟
به عنوان مثال:
90° حول محور Y
یعنی Object رو به اندازهی ۹۰ درجه حول محور Y بچرخونیم.
در ادامهی دوره، وقتی به Matrix ها برسیم، میبینیم چطور میشه این عملیات رو به شکل عمومی و قابل استفاده در Graphics پیادهسازی کرد.
پس تا اینجا…
ما دو نوع Transformation رو دیدیم:
Translation: جابهجا کردن آبجکت.
Rotation: چرخاندن آبجکت حول یک نقطه یا محور.
اما هنوز یک Transformation پایهی دیگه باقی مونده.
فرض کنید همین مثلث رو داریم و میخوایم بدون جابهجا کردن یا چرخوندنش، فقط دو برابر بزرگترش کنیم.
چطور باید این کار رو انجام بدیم؟
توی Thread بعدی میریم سراغ:
Scaling
و میبینیم چطور میتونیم اندازهی یک شی رو تغییر بدیم.