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



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

مختصات همگن (Homogeneous Coordinates) آموزش و یادگیری مختصات همگن (Homogeneous Coordinates) به صورت رایگان

توی ترد قبلی دیدیم که چطور می‌تونیم چند Transformation رو با هم ترکیب کنیم.

و تونستیم ازشون یک ماتریس ترکیبی درست کنیم:

$$ M = RS $$

و بعد همون ماتریس رو روی نقطه مون اعمال کنیم.

اما آخر ترد قبلی به یک مشکل رسیدیم.

با جا به جایی چیکار کنیم؟


مشکل کجاست؟

یادتونه که برای جابه‌جایی یک نقطه، از یک بردار استفاده می‌کردیم.

فرض کنید داریم:

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

و می‌خوایم نقطه A رو:

۳ واحد در X

و

۲ واحد در Y

جابه‌جا کنیم.

پس بردار جا به جایی ما می‌شه:

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

و جا به جایی رو اینطوری انجام می‌دادیم:

$$ \vec{A’} = \vec{A} + \vec{T} $$

در نتیجه:

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

پس:

$$ \vec{A’} = \begin{pmatrix} 5 \cr 5 \end{pmatrix} $$

تا اینجا همه‌چیز خوبه.

اما…

ما برای Scale و Rotation از ضرب ماتریس ها استفاده می‌کردیم:

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

پس اگر بخوایم جا به جایی هم بتونه وارد همین سیستم بشه، باید بتونیم اون رو هم به شکل یک ماتریس نمایش بدیم.


چرا نمی‌تونیم با یک ماتریس 2×2 این کار رو انجام بدیم؟

فرض کنید بخوایم یک ماتریس دو در دو برای جا به جایی(Translation) بسازیم.

مشکل اینجاست که یک ماتریس دو در دو فقط می‌تونه مختصات X و Y رو با ضرب و جمع‌های خطی مختلف به مختصات جدید تبدیل کنه.

ولی جا به جایی باید بتونه یک مقدار ثابت به مختصات اضافه کنه.

مثلاً:

$$ x’ = x + 3 $$

و:

$$ y’ = y + 2 $$

عدد 3 و 2 باید بدون توجه به مقدار اولیه‌ی x و y به نتیجه اضافه بشن.

اما در ضرب یک ماتریس دو در دو در یک بردار، خروجی به صورت ترکیبی از خود x و y ساخته می‌شه.

پس یک ماتریس دو در دو به تنهایی نمی‌تونه این مقدار ثابت رو وارد محاسبه کنه.

اینجا باید یک ترفند به کار ببریم.


یک مختصات به کار اضافه کنیم!

تا اینجا یک نقطه در فضای دوبعدی رو اینطوری نمایش می‌دادیم:

$$ \vec{A} = \begin{pmatrix} x \cr y \end{pmatrix} $$

حالا بیاید یک مقدار دیگه هم بهش اضافه کنیم:

$$ \vec{A} = \begin{pmatrix} x \cr y \cr 1 \end{pmatrix} $$

یعنی به‌جای دو مؤلفه، نقطه‌ی ما حالا سه مؤلفه داره.

این مدل نمایش رو می‌گیم:

Homogeneous Coordinates

یا:

مختصات همگن


این 1 اضافه برای چیه؟

این 1 قرار نیست مختصات واقعی جدیدی به نقطه اضافه کنه.

فقط یک مقدار کمکیه که به ما اجازه می‌ده Transformation هایی که قبلاً نمی‌تونستیم با ماتریس انجام بدیم، حالا وارد همین سیستم بشن.

مثلاً می‌خوایم نقطه‌ی:

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

رو با Translation:

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

جابه‌جا کنیم.

حالا می‌تونیم یک Translation Matrix سه در سه بسازیم:

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

و اون رو روی نقطه اعمال کنیم:

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

یعنی:

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

حالا محاسبه می‌کنیم:

$$ \vec{A’} = \begin{pmatrix} (1)(2) + (0)(3) + (3)(1) \cr (0)(2) + (1)(3) + (2)(1) \cr (0)(2) + (0)(3) + (1)(1) \end{pmatrix} $$

در نتیجه:

$$ \vec{A’} = \begin{pmatrix} 5 \cr 5 \cr 1 \end{pmatrix} $$

یعنی:

X = 5

Y = 5

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


چرا این اتفاق افتاد؟

چون اون 1 اضافه اجازه داد که مقادیر جا به جایی مستقیماً وارد محاسبه بشن.

مثلاً در سطر اول داشتیم:

$$ (1)(x) + (0)(y) + (3)(1) $$

که ساده می‌شه به:

$$ x + 3 $$

و برای سطر دوم:

$$ (0)(x) + (1)(y) + (2)(1) $$

که می‌شه:

$$ y + 2 $$

پس با اضافه کردن یک مؤلفه‌ی 1، تونستیم جابه‌جایی رو هم با ماتریس انجام بدیم.


اون مؤلفه جدیدی که به نقطه مون اضافه کردیم چی می‌شه؟

در واقع ما اطلاعات جدیدی درباره‌ی موقعیت نقطه(Point) وارد نکردیم.

این مؤلفه‌ی اضافه فقط بخشی از یک روش ریاضی برای نمایش مختصات محسوب می‌شه.

در فضای دوبعدی:

$$ (x,y) $$

رو می‌تونیم به شکل:

$$ (x,y,1) $$

نمایش بدیم.

بعداً در فضای سه‌بعدی هم همین ایده رو داریم.

یک نقطه سه‌بعدی که قبلاً اینجوری بوده:

$$ (x,y,z) $$

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

$$ (x,y,z,1) $$


حالا یک اتفاق خیلی مهم افتاده!

تا قبل از این، جا به جایی با یک جمع ساده برداری انجام می‌شد.

اما حالا می‌تونیم جا به جایی رو هم به شکل یک Transformation Matrix نمایش بدیم.

یعنی:

Translation

Rotation

Scaling

همگی می‌تونن در قالب یک ماتریس نمایش داده بشن.

و این یعنی حالا می‌تونیم همشون رو با هم ترکیب کنیم.

مثل این ماتریس:

$$ M = TRS $$

و بعد:

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

یعنی تمام Transformation های ما می‌تونن در یک ماتریس ترکیبی قرار بگیرن.


اما یه چیز جالب… دوربین!

حالا که با Homogeneous Coordinates تونستیم جا به جایی رو هم وارد سیستم ماتریس ها کنیم، یک اتفاق جالب دیگه هم میوفته.

این مدل نمایش فقط برای حل مشکل جا به جایی استفاده نمی‌شه.

اتفاقاً در ادامه‌ی گرافیک کامپیوتری، یک کاربرد خیلی مهم دیگه هم برای اون پیدا می‌کنیم.

وقتی بخوایم یک دنیای سه‌بعدی رو روی یک صفحه‌ی دوبعدی نمایش بدیم، دوباره همین مختصات همگن به کمکمون میان.

اما چطور؟

توی تردهای بعدی، وقتی به Projection برسیم، می‌بینیم این 1 اضافه و Homogeneous Coordinates چه نقش مهم‌تری پیدا می‌کنن.

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

نظرات