مدلسازی جهان — دستگاه مختصات آموزش و یادگیری مدلسازی جهان — دستگاه مختصات به صورت رایگان
Coordinate System چیست؟
توی ترد های قبلی دیدیم که میتونیم موقعیت یک نقطه رو با استفاده از Coordinate ها مشخص کنیم.
مثل نقطه A:
A = (2, 3)
و فهمیدیم که Vector ها هم میتونن برای نمایش جهت و جابهجایی استفاده بشن.
حالا:
این مختصات نسبت به چی معنی پیدا میکنن؟
وقتی میگیم:
A = (2, 3)
از کجا تشخیص میدیم این نقطه کجای فضا قرار داره؟
اینجاست که مفهوم Coordinate System وارد میشه.
Coordinate System یعنی چی؟
Coordinate System یا «سیستم مختصات»، مجموعهای از قواعده که مشخص میکنه چطور موقعیت نقاط رو در یک فضا توصیف کنیم.
بهصورت ساده، یک سیستم مختصات مشخص میکنه:
- محورهای مختصات کجا قرار دارن؟
- جهت هر محور چیه؟
- واحد اندازهگیری چیه؟
- و Origin کجاست؟
به عنوان مثال تو فضای دو بعدی، دو محور داریم:
X : محور افقی
Y : محور عمودی
و به محل تقاطع این دو محور، Origin یا مبدأ سیستم مختصات میگن.
Origin
در یک سیستم مختصات، یک نقطهی مرجع داریم که بهش میگیم:
Origin
مختصات Origin در یک سیستم دوبعدی:
(0, 0)
و در یک سیستم سهبعدی:
(0, 0, 0)
از این نقطه، موقعیت بقیهی نقاط رو مشخص میکنیم.
اگر داشته باشیم:
A = (3, 2)
یعنی موقعیت A رو نسبت به Origin مشخص کردیم.
یک دنیا میتونه چند Coordinate System داشته باشه؟
بله!
و این یکی از مهمترین چیزهایی هست که در Graphics باهاش سروکار داریم.
ما میتونیم یک سیستم مختصات داشته باشیم که فضای کل دنیای بازی رو توصیف میکنه.
یک سیستم دیگه برای موقعیت یک Object.
و حتی یک سیستم مختصات مخصوص Camera.
یعنی یک نقطه میتونه در سیستمهای مختصات مختلف، مختصات متفاوتی داشته باشه.
اما همچنان همون نقطه رو توصیف کنه.
این موضوع در Graphics خیلی مهمه و در ادامهی دوره بیشتر باهاش کار میکنیم.
یک مثال ساده از چند سیستم مختصات
فرض کنید داخل یک بازی، یک صندلی داریم که در دنیای بازی قرار گرفته.
حالا یک نقطه روی پایهی صندلی میذاریم.
اگر بخوایم موقعیت این نقطه رو نسبت به دنیای بازی مشخص کنیم، ممکنه بگیم:
P = (10, 5, 3)
یعنی این نقطه در این موقعیت از دنیای بازی قرار داره.
اما حالا اگر بخوایم موقعیت همون نقطه رو نسبت به خود صندلی مشخص کنیم، ممکنه مختصاتش این باشه:
P = (0, 1, 0)
چطور ممکنه یک نقطه همزمان دو مختصات متفاوت داشته باشه؟
چون این دو مختصات دارن نقطه رو نسبت به دو مرجع متفاوت توصیف میکنن.
در سیستم مختصات دنیای بازی:
«نقطه نسبت به کل دنیا کجاست؟»
در سیستم مختصات صندلی:
«نقطه نسبت به خود صندلی کجاست؟»
خود نقطه هیچ تغییری نکرده.
فقط مرجعی که باهاش موقعیت نقطه رو توصیف میکنیم تغییر کرده.
مثلاً اگه صندلی رو تو دنیای بازی جابهجا کنیم، مختصات نقطه، نسبت به صندلی همچنان میتونه:
(0, 1, 0)
باقی بمونه.
چون نقطه هنوز دقیقا همونجاییه که نسبت به صندلی بوده.
اما مختصاتش نسبت به دنیای بازی تغییر میکنه.
این یکی از دلایلیه که در Graphics با چندین Coordinate System مختلف سروکار داریم.
بعدا وقتی به Transformations و Camera برسیم، میبینیم چطور میتونیم یک نقطه رو از یک Coordinate System به سیستم مختصات دیگه ای تبدیل کنیم.
پس X و Y و Z همیشه یک شکل نیستن؟
نه لزوما!
وقتی وارد فضای سهبعدی میشیم، باید مشخص کنیم هر محور کدوم جهت رو نشون میده.
مثلاً یک Coordinate System میتونه این قرارداد رو داشته باشه:
X : راست
Y : بالا
Z : جلو
اما یک Coordinate System دیگه میتونه از قرارداد متفاوتی استفاده کنه:
X : راست
Z : بالا
Y : جلو
در هر دو حالت ما سه محور Y، X و Z رو داریم، اما معنی هر محور نسبت به فضای اطراف متفاوت شده.
حتی جهت یک محور هم میتونه برعکس باشه.
مثلاً ممکنه داشته باشیم:
X : راست
Y : بالا
Z : جلو
و در یک سیستم دیگه:
X : راست
Y : بالا
Z : عقب
پس وقتی با یک فضای سهبعدی کار میکنیم، فقط دونستن اینکه «سه محور Y، X و Z داریم» کافی نیست.
باید بدونیم:
هر محور به کدوم جهت اشاره میکنه و این محورها چه رابطهای با هم دارن.
اینها بخشی از قراردادی هستن که یک Coordinate System تعریف میکنه.
Right-Handed و Left-Handed یعنی چی؟
حالا اگر نحوهی قرار گرفتن محورهای X، Y و Z نسبت به هم رو بررسی کنیم، به دو نوع سیستم مختصات رایج میرسیم:
Right-Handed Coordinate System
و
Left-Handed Coordinate System
تفاوت اصلی این دو در رابطهی جهت محورهای X، Y و Z با یکدیگه است.
به زبان ساده، اگر جهت دو محور رو بدونیم، این قرارداد مشخص میکنه محور سوم باید در کدوم جهت قرار بگیره.
فعلاً لازم نیست وارد ریاضیاتش بشیم.
فقط این رو به خاطر داشته باشید که:
در Graphics، همیشه باید بدونیم یک سیستم مختصات، از چه قراردادی برای محورهای خودش استفاده میکنه.
چون اگر دو بخش مختلف برنامه از قراردادهای متفاوتی استفاده کنن، ممکنه چیزی که انتظار داریم به سمت راست بره، به سمت چپ یا حتی در جهت مخالف حرکت کنه!
بعدا وقتی به Transformations، Camera و Graphics APIs برسیم، این موضوع اهمیت بیشتری پیدا میکنه.
پس تا اینجا چی داریم؟
حالا سه مفهوم پایه داریم:
یک موقعیت در فضا : Points
چیزی برای نمایش جهت، اندازه و جابهجایی : Vector
مجموعهای از قواعد که مشخص میکنه این موقعیتها و جهتها نسبت به چه مرجعی تعریف شدن : Coordinate System
با این مفاهیم میتونیم شروع کنیم به توصیف یک دنیای هندسی.
اما یک سؤال جالب:
اگر چند نقطه داشته باشیم، چطور ازشون یک شکل هندسی بسازیم؟
چطور سه نقطه تبدیل به یک Triangle(مثلث) میشن؟
و چند Triangle چطور تبدیل به یک 3D Model میشن؟
برای جواب این سؤال، توی Thread بعدی میریم سراغ: Geometry