دگرگونسازی جهان — چگونه اندازه اشیا را تغییر می دهیم؟ آموزش و یادگیری دگرگونسازی جهان — چگونه اندازه اشیا را تغییر می دهیم؟ به صورت رایگان
توی تردهای قبلی دیدیم که چطور میتونیم یک آبجکت رو:
- جابهجا کنیم.
- چرخش بدیم.
اما حالا فرض کنید یک مثلث داریم و میخوایم بدون جابهجا کردن یا چرخوندنش، فقط بزرگترش کنیم.
مثلاً میخوایم اندازهی مثلث رو سه برابر کنیم.
خب…
چطور باید این کار رو انجام بدیم؟
اینجا با Transformation بعدی آشنا میشیم:
Scaling
Scaling یعنی چی؟
Scaling یعنی تغییر دادن اندازهی یک آبجکت.
مثلاً اگر یک نقطه داشته باشیم:
A = (2, 3)
و بخوایم اون رو نسبت به مبدا مختصات دو برابر کنیم:
A’ = (4, 6)
در واقع مختصات نقطه رو در عدد 2 ضرب کردیم.

پس برای تغییر اندازه یک نقطه میتونیم بگیم:
Position × Scale = New Position
حالا یک مثلث چی؟
فرض کنید مثلث ما سه رأس داره:
A = (1, 0)
B = (3, 0)
C = (1, 2)
و میخوایم اندازهش رو دو برابر کنیم.
پس Scale factor ما میشه:
S = 2
حالا همین مقدار رو روی مختصات تمام رأس ها اعمال میکنیم:
A’ = (1, 0) × 2 = (2, 0)
B’ = (3, 0) × 2 = (6, 0)
C’ = (1, 2) × 2 = (2, 4)

مثلث بزرگتر شده، ولی شکل کلی اش همچنان همونه.
فقط فاصلهی رأس ها از مبدا مختصات دو برابر شده.
اما یک مشکل…
اگه اندازه یک آبجکت رو تغییر بدیم، همیشه نمیخوایم نسبت به مبدا مختصات بزرگ یا کوچیک بشه.
مثلاً فرض کنید یک ماشین داریم و میخوایم بدون اینکه از مبدا مختصات دور بشه اندازه اش رو دو برابر کنیم.
پس نمیخوایم ماشین از جای خودش فاصله بگیره و در دنیا دور بشه!
میخوایم:
شی حول خودش بزرگ یا کوچیک بشه.
اینجاست که دوباره مفهوم Pivot که تو Rotation یاد گرفتیم، به کارمون میاد.
Scaling حول Pivot
برای Scaling هم باید مشخص کنیم تغییر اندازه نسبت به کدوم نقطه انجام بشه.
اگر Pivot روی مبدا مختصات باشه، فاصلهی رأس از مبدا مختصات تغییر میکنه.
اما اگر Pivot روی مرکز آبجکت باشه، آبجکت از مرکز خودش بزرگ یا کوچیک میشه.
یعنی اگه:
Pivot مرکز آبجکت باشه.
و
Scale factor برابر ۲ باشه.
فاصلهی قسمتهای مختلف آبجکت حول Pivot دو برابر میشه.
در نتیجه اندازه آبجکت دو برابر میشه، ولی Pivot و مرکزیت سر جای خودش باقی میمونه.
Scaling فقط برای بزرگتر کردن نیست!
Scale میتونه کمتر از 1 هم باشه.
مثلاً:
Scale = 0.5
یعنی اندازهی آبجکت نصف بشه.
از طرف دیگه:
Scale factor = 3
یعنی سه برابر بزرگتر بشه.
حتی میتونیم روی محورهای مختلف Scale متفاوتی داشته باشیم.
مثلاً:
S = (2, 1, 1)
یعنی:
۲ برابر در X
۱ برابر در Y
۱ برابر در Z
در نتیجه آبجکت فقط در راستای محور X کشیده میشه.
پس تا اینجا…
حالا سه Transformation پایه رو داریم:
Translation: جابهجا کردن آبجکت
Rotation: چرخاندن آبجکت
Scaling: تغییر اندازهی آبجکت
و هر سه Transformation در نهایت روی موقعیت رأس ها اثر میذارن.
اما یه چالش جالب پیش میاد.
ما برای هرکدوم از این Transformation ها، محاسبات جداگانه انجام دادیم.
Translation با جمع کردن Vector انجام شد.
Rotation با فرمولهای مثلثاتی خودش.
Scaling با ضرب کردن مختصات.
آیا راهی وجود داره که همهی این Transformation ها رو با یک روش واحد انجام بدیم؟
اینجاست که یکی از مهمترین مفاهیم ریاضی در Graphics وارد ماجرا میشه:
Matrix
توی ترد بعدی میبینیم ماتریس ها چطور به ما کمک میکنن Transformation ها رو به شکلی منظم و قابل ترکیب انجام بدیم.
با کامنت گذاشتن بهم انرژی بده🤍