مدلسازی جهان — بردار ها (Vectors) آموزش و یادگیری مدلسازی جهان — بردار ها (Vectors) به صورت رایگان
Vector چیست؟
توی Thread قبلی دیدیم که برای مشخص کردن موقعیت یک نقطه، از کوردینیت ها استفاده میکنیم.
Point = (3, 2, 5)
این اطلاعات به ما میگن نقطه کجاست.
اما حالا یک سؤال جدید داریم:
اگر بخوایم یک جهت یا حرکت رو نمایش بدیم، چی؟
فرض کنید یک شیء داریم که میخوایم به سمت راست حرکتش بدیم.
یا میخوایم بدونیم یک مدل سه بعدی به کدوم جهت قرار گرفته.
یا میخوایم فاصلهی بین دو نقطه رو حساب کنیم.
اینجا دیگه فقط «موقعیت» کافی نیست.
اینجاست که (بُردار)Vector وارد ماجرا میشه.
Vector چه چیزی رو نمایش میده؟
به زبان ساده، Vector (یا بُردار) میتونه اطلاعاتی مثل:
- Direction — جهت
- Magnitude — اندازه
رو نمایش بده:
Vector = (4, -7)
وکتور به این معنیه که:
«۴ واحد در جهت مثبت محور X، و ۷ واحد در جهت منفی محور Y حرکت کنیم.»
پس برخلاف یک Point که برای مشخص کردن موقعیت استفاده میشه، Vector میتونه یک جهت و مقدار حرکت رو نمایش بده.
Vector و Point چه فرقی دارن؟
ممکنه اینجا یک سؤال پیش بیاد:
خب، هردوشون یه سری عدد توی پرانتز دارن! فرقشون چیه؟
:
Point = (3, 2)
Vector = (3, 2)
از نظر ظاهری کاملا شبیه هم هستن.
اما معنایی که از این اعداد برداشت میکنیم فرق داره.
Point میگه:
«من کجا هستم؟»
Vector میگه:
«در چه جهتی و به چه اندازه حرکت کنم؟»
این تفاوت در Graphics خیلی مهمه.
از یک نقطه به یک نقطهی دیگر
یکی از کاربردهای مهم Vector اینه که میتونیم باهاش جابجایی بین دو نقطه رو نمایش بدیم.
فرض کنید دو نقطه داریم:
- A = (2, 1)
- B = (5, 4)
اگر بخوایم بدونیم از A چطور به B برسیم، اختلاف مختصات این دو نقطه رو حساب میکنیم:
Vector AB = B - A = (5, 4) - (2, 1) = (3, 3)
.png)
پس:
Vector AB = (3,3)
یعنی برای رسیدن از A به B باید:
۳ واحد در محور X و ۳ واحد در محور Y حرکت کنیم.
حالا چرا برای رسیدن از A به B، اومدیم A رو از B کم کردیم؟
چرا مبدأ رو از مقصد کم میکنیم؟
برای اینکه بهتر متوجه بشیم، بیاید مسئله رو از یه زاویهی دیگه نگاه کنیم.
ما میخوایم بفهمیم برای رفتن از A به B، چه تغییری باید در موقعیت A ایجاد کنیم.
یعنی دنبال یک Vector هستیم که اگر به A، اضافهاش کنیم، به B برسیم:
A + Vector AB = B
پس برای پیدا کردن Vector AB، باید A رو از دو طرف کم کنیم:
Vector AB = B - A
حالا با مثال خودمون:
A = (2, 1)
B = (5, 4)
پس:
Vector AB = (5, 4) - (2, 1) = (3, 3)
یعنی برای اینکه از A به B برسیم، باید:
۳ واحد در محور X
و
۳ واحد در محور Y
حرکت کنیم.
پس یک قانون ساده داریم:
برای پیدا کردن Vector از A به B، مبدأ رو از مقصد کم میکنیم.
B - A <– از A به B
و اگر برعکس عمل کنیم:
A - B <– از B به A
در این حالت جهت Vector هم برعکس میشه.
Vector در کجای Graphics استفاده میشود؟
Vector ها تقریبا همهجای Graphics حضور دارن.
مثلا برای نمایش:
- جهت حرکت یک Object
- جهت نگاه کردن Camera
- جهت یک Light
- Normal یک سطح
- فاصله و جهت بین دو نقطه
- موقعیت و جهت در محاسبات سهبعدی
از وکتور ها استفاده میکنیم.
به همین دلیل Vector یکی از مفاهیم پایهای Graphics محسوب میشه.
Vector در فضای سهبعدی
همونطور که Point میتونه در فضای سهبعدی سه Coordinate داشته باشه، Vector هم میتونه سه مؤلفه داشته باشه:
Vector = (x, y, z)
مثل:
Direction = (1, 0, 0)
میتونه یک جهت روی محور X رو نمایش بده.
یا:
Direction = (0, 1, 0)
جهت محور Y رو نمایش میده.
و:
Direction = (0, 0, 1)
جهت محور Z رو نمایش میده.
پس تا اینجا…
ما دو مفهوم مهم داریم:
Point
برای مشخص کردن موقعیت.
Vector
برای نمایش چیزهایی مثل جهت، اندازه و جابجایی.
و این دو، پایه خیلی از محاسباتی هستن که در ادامهی Graphics باهاشون سر و کار داریم.
اما هنوز یک سؤال مهم باقی مونده:
محورهای Y، X و Z که داریم دربارهشون حرف میزنیم، نسبت به چه چیزی تعریف شدن؟
از کجا میفهمیم X کدوم طرفه؟
Y کدوم طرفه؟
Z کدوم طرفه؟
و اگر چند سیستم مختصات مختلف داشته باشیم، موقعیت یک نقطه در هرکدوم چه معنایی داره؟
برای جواب این سؤال، توی Thread بعدی میریم سراغ: Coordinate Systems