گرافیک کامپیوتری به سبکِ تِرِد گرافیک کامپیوتری به سبکِ تِرِد



شما این تِرِد رو مطالعه کردید آفرین.🍻
اوپس: تصویر 502
جسی ساما 1405/6/6

چرا به ماتریس‌ها نیاز داریم؟ آموزش و یادگیری چرا به ماتریس‌ها نیاز داریم؟ به صورت رایگان

توی تردهای قبلی دیدیم که چطور می‌تونیم یک آبجکت رو:

حرکت بدیم.

چرخش بدیم.

اندازه‌ش رو عوض کنیم.

و برای هرکدوم هم یک روش ریاضی داشتیم.


مثلاً برای حرکت دادن، از جمع کردن بردارها استفاده کردیم.

برای تغییر اندازه، مختصات رو در یک مقدار ضرب کردیم.

و برای چرخش هم از فرمول‌های مثلثاتی استفاده کردیم.


اما فرض کنید یک آبجکت داشته باشیم و بخوایم همزمان:

جابه‌جاش کنیم، بچرخونیم و اندازه‌ش رو تغییر بدیم.

باید برای هرکدوم از این Transformation ها محاسبات جداگانه انجام بدیم.

حالا اگر تعداد Transformation ها بیشتر بشه چی؟

مثلاً:

  • چند بار جابه‌جایی
  • چند چرخش مختلف
  • چند تغییر اندازه
  • و ترکیبی از همه‌ی این‌ها

مدیریت این محاسبات کم‌کم سخت و شلوغ می‌شه.

اینجا یه سؤال مهم به وجود میاد:

آیا می‌تونیم یک روش عمومی داشته باشیم که برای اعمال همه‌ی این Transformation ها از یک ساختار واحد استفاده کنیم؟

اینجاست که Matrix وارد ماجرا می‌شه.


Matrix چیه؟

خوبه که ماتریس‌ها رو یاد داشته باشید. ولی اگه از قبل با ماتریس‌ها توی ریاضی آشنا نیستید، نگران نباشید.

فعلاً می‌خوایم خیلی ساده بهش نگاه کنیم.

ماتریس در واقع مجموعه‌ای از اعداد هست که در قالب ردیف و ستون کنار هم قرار گرفتن.

مثل این:

$$ M = \begin{pmatrix} 2 & 0 \cr 0 & 2 \end{pmatrix} $$

M اینجا یک ماتریس ۲ در ۲ هست.

اما چیزی که برای ما مهمه اینه که ماتریس ها فقط یه جدول از اعداد نیستن؛ می‌تونن روی بردار ها و مختصات، عملیات ریاضی انجام بدن.

و این دقیقاً همون چیزیه که برای Transformation بهش نیاز داریم.


Matrix به چه دردی می‌خوره؟

بیاید همون قضیه Scaling رو دوباره ببینیم.

فرض کنید می‌خوایم موقعیت نقطه A:

$$ A = (2, 3) $$

رو نسبت به مبدأ مختصات طوری مقیاس کنیم که:

در جهت محور X دو برابر بشه.

در جهت محور Y سه برابر بشه.

پس:

$$ A’ = (4, 9) $$

حالا می‌تونیم همین کاری که انجام دادیم رو با یک ماتریس نمایش بدیم:


برای Scale با فاکتور ۲ در محور X و ۳ در محور Y، ماتریس ما این شکلیه:

$$ M = \begin{pmatrix} 2 & 0 \cr 0 & 3 \end{pmatrix} $$

همونطور که می‌بینید، مقدار مربوط به Scale هر محور روی قطر اصلی ماتریس قرار گرفته.

در این مثال:

۲ : Scale در محور X

۳ : Scale در محور Y

و بقیه‌ی اعضای ماتریس صفر هستن.

(در آینده نحوه ساخت این ماتریس‌ها رو کامل توضیح میدم.)


حالا برای اینکه Scaling رو با ماتریس انجام بدیم، اول نقطه A رو به شکل یک بردار ستونی می‌نویسیم:

$$ \vec{A} = \begin{pmatrix} 2 \cr 3 \end{pmatrix} $$

و بعد اون رو در ماتریس Scale ضرب می‌کنیم:

$$ A’ = M\vec{A} $$

پس:

$$ A’ = \begin{pmatrix} 2 & 0 \cr 0 & 3 \end{pmatrix} \cdot \begin{pmatrix} 2 \cr 3 \end{pmatrix} $$

حالا ضرب ماتریس رو مرحله‌به‌مرحله انجام می‌دیم:

$$ A’_x = 2(2) + 0(3) = 4 $$

$$ A’_y = 0(2) + 3(3) = 9 $$

بنابراین:

$$ A’ = \begin{pmatrix} 4 \cr 9 \end{pmatrix} $$

یا به صورت مختصات:

$$ A’ = (4, 9) $$

پس به‌جای اینکه هر بار جداگانه بگیم:

«مختصات X رو در ۲ ضرب کن.»

«مختصات Y رو در ۳ ضرب کن.»

می‌تونیم خود Transformation رو در قالب یک Matrix نگه داریم و اون رو روی نقطه اعمال کنیم.


Transformation Matrix یعنی چی؟

به ماتریس هایی که برای انجام یک Transformation خاص استفاده می‌شن، می‌گیم:

Transformation Matrix

مثلاً می‌تونیم یک ماتریس برای: Scaling

داشته باشیم.

یک ماتریس برای: Rotation

و یک ماتریس برای: Translation

هر کدوم از این ماتریس ها مشخص می‌کنن وقتی روی یک نقطه یا بردار اعمال می‌شن، چه تغییری ایجاد بشه.

فعلاً وارد فرمول ماتریس مربوط به هر Transformation نمی‌شیم؛ تو تِرِد های بعدی کامل باهاشون آشنا می‌شیم.


حالا انقدر تاکید روی استفاده ماتریس ها برای چیه؟

چون حالا Transformation ما خودش می‌تونه تبدیل به یک ساختار داده بشه.

مثلاً فرض کنید یک شئ داریم.

می‌تونیم Transformation اون رو به شکل یک ماتریس نگه داریم و بعد همون Transformation رو روی تمام رأس های شئ مون اعمال کنیم.

حالا اگر بخوایم چند Transformation مختلف پشت سر هم انجام بدیم چی؟

به عنوان مثال اول:

Scale

بعد:

Rotate

بعد:

Translate

اینجاست که ماتریس ها خیلی کاربردی‌تر می‌شن.

چون می‌تونیم Transformation های مختلف رو ترکیب کنیم و به جای اینکه هر بار محاسبات جداگانه‌ای انجام بدیم، با ماتریس ها یک Transformation ترکیبی بسازیم.


خب، حالا چرا ماتریس ها این‌قدر مهم شدن؟

آیا می‌تونیم چند Transformation رو به کمک ماتریس ها ترکیب کنیم؟

اگه چند ماتریس داشته باشیم، چطور می‌تونیم اون‌ها رو با هم ترکیب کنیم تا زنجیره ای از چند Transformation پشت سر هم روی شئ اعمال بشن؟

این دقیقاً موضوع ترد بعدیه:

Transform Composition

توی ترد بعدی بهش میپردازیم.

شماره تِرِد : شماره 8 از 10

نظرات