المتجهات والعمليات عليها

كتبه بركات يوم الجمعـة, 02 أيلول 2016

تعتمد الرسوميات على الجبر الخطي linear algebra، حيث يستفاد من الأدوات التي يوفرها لتسهيل وتمثيل الكثير من العمليات الرسومية مثل التدوير والتحريك والإسقاط، هذا المقال جزء من مقالات قادمة توضح أهم المفاهيم والأدوات الرياضية المستخدمة الرسوميات الثنائية والثلاثية الأبعاد، سنبدأ بمقدمة عن فضاء المتجهات والمتجهات.

فضاء المتجهات Vector spaces

الجبر الخطي يتمحور حول الفضاءات المتجهية vector spaces والمتجهات vectors والعمليات عليها، ويعرّف الفضاء المتجهي $\mathbf{V}$ والذي يسمى أيضاً الفضاء الخطي linear space كمفهوم عام بأنه أي مجموعة من المتجهات المنتمية لهذا الفضاء $\mathbf{v} \in \mathbf{V}$، والتي يمكن جمعها مع متجهات مثلها $\mathbf{u} + \mathbf{v} = \mathbf{w}$ لتعطي متجهات في نفس الفضاء $\mathbf{u}, \mathbf{v}, \mathbf{w} \in \mathbf{V}$، أوضربها بقيمة قياسية scalar التي يتكون منها هذا المتجه لتعطي متجه آخر في نفس الفضاء $a\mathbf{u} \in \mathbf{V}$، هناك أيضاً خصائص جبرية أخرى مشتقة سأذكرها لاحقاً.

لاحظ أن هذا التعريف عام، فكثير من الأشياء ينطبق عليها هذا التعريف، المتجهات البديهية الشائعة في الفيزياء المكونة من أعداد حقيقية ليست سوى نوع من أنواع المتجهات، ولايشترط أيضاً أن يعبّر المتجه عن اتجاه كما قد يشير الاسم، فهناك العديد من الأفضية المتجهية التي تتكون من متجهات من أنواع أخرى مثل فضاء الدوال، وهناك العديد من أنواع من القيم القياسية مثل الأعداد المركبة، فلو فرضنا أن $\mathbf{V}$ تمثل فضاء الدوال التي تأخذ أعداد حقيقة وتعطي أعداد حقيقية $f : \mathbb{R} \to \mathbb{R}$، الدالة $f_1 \in \mathbf{V}$ متجه لأنها في الفضاء يمكن جمعها مع المتجه $f_2 \in \mathbf{V}$ لتعطي دالة أخرى $(f_1 + f_2)(x) = f_1(x) + f_2(x) \in \mathbf{V}$، ويمكننا ضرب الدالة مع قيمة قياسية $a \in \mathbb{R}$ لتعطي دالة أخرى $(af)(x) = af(x) \in \mathbf{V}$.

هذه معلومة مهمة ضعها في بالك عندما تقرأ بعض كتب أو المصادر عن الجبر الخطي، لأنها قد تكون موجهة لتطبيقات أخرى مثلاً للتحليل الدالي functional analysis وقد تبدو لك أنها تتعارض مع خلفيتك عن المتجهات رغم أنها تستخدم نفس اللغة، فالفضاء المتجهي والمتجهات مفاهيم عامة لها تطبيقات مختلفة، لكن في الرسوميات لانحتاج سوى للفضاء الإقليدي $\mathbb{R}^n$ ذو الـ$n$ أبعاد المكون من أعداد حقيقية، هذه الأبعاد لاتتجاوز عادة الثلاثة أبعاد، أو أربعة أبعاد لعمل بعض الحيل الجبرية المفيدة.

الفضاء الإقليدي Euclidean space

يمثل الفضاء الإقليدي بـ$\mathbb{R}^n$، حيث أن $n$ تمثل عدد الأبعاد، ويمثل المتجهه في هذا الفضاء بمجموعة مرتبة بعدد $n$ من الأعداد الحقيقية، حيث يكتب المتجه عادةً بالصيغة:

$$\mathbf{v} = \begin{bmatrix} v_0\\ v_1\\ \vdots\\ v_{n-1} \end{bmatrix} \in \mathbb{R}^n \text{ where } v_0, v_1, \cdots, v_{n - 1} \in \mathbb{R}$$

رمزنا للمتجه بحرف صغير عريض $\mathbf{v}$ لتمييزه عن القيمة القياسية $v$، وتسمى الأعداد الحقيقة $v_0, v_1, \cdots, v_{n - 1}$ بمركبات المتجه وتكتب كما أشرت بحرف صغير عادي، هناك صيغة أخرى تسمى المتجه الصفي وتكتب $\mathbf{v} = \begin{bmatrix}v_0 & v_1 & \cdots & v_{n-1}\end{bmatrix}$، كلاهما نفس الشيء من حيث المبدأ عدى بعض الإختلافات في الترتيب عند الضرب مع مصفوفة، إلا أن الصيغة الأولى أكثر شيوعاً في كتب الرياضيات والرسوميات.

الأعداد $v_0, v_1, \cdots, v_{n - 1}$ قد تكون قيم نقطة، أو اتجاه، أو لون، أو غيرها من الأشياء التي قد لايكون لها علاقة بالهندسة أو الرسوميات، فالسياق يحدد معناها، تماماُ كالأعداد الحقيقية $\mathbb{R}$.

خارج الرسوميات، يمكنك أن تفكر بالمتجهات في $\mathbb{R}^n$ بأنها تعميم للأعداد الحقيقية المفردة $\mathbb{R}$، فمع الأعداد الحقيقية يمكننا مثلاً جمع البرتقالات مع البرتقالات فقط ونحتاج لكمية أخرى منفصلة لو أردنا التعامل مع التفاحات، بينما في $\mathbb{R}^2$ يمكننا جمع البرتقالات والتفاحات مع بعض في كمية واحدة بدل التعامل معهما ككميتين منفصلتين، وكهذا مع باقي الأبعاد.

لتسهيل الكتابة على نفس السطر قد أستخدم $(v_0, v_1, \cdots, v_{n-1})$، حيث أن:

$$(v_0, v_1, \cdots, v_{n-1}) \equiv \begin{bmatrix} v_0 & v_1 & \cdots & v_{n-1} \end{bmatrix}^T = \begin{bmatrix} v_0 \\ v_1 \\ \vdots \\ v_{n-1} \end{bmatrix}$$

تعني $\equiv$ أنه مكافئ، وهي علامة مساواة سأستخدمها عندما تكون هناك طريقتين لكتابة نفس الشيء، وتسمى العملية $\mathbf{v}^T$ بالمنقول transpose، حيث تجعل الصف عمود والعمود صف.

المتجهات في الفضاء الإقليدي مثل أي متجهات يمكن جمعها مع متجهات مثلها، وضربها بقيم قياسية لتعطي متجهات في نفس الفضاء، حيث أن الجمع معرّف بأنه:

$$\mathbf{u} + \mathbf{v} = \begin{bmatrix} u_0\\ u_1\\ \vdots\\ u_{n-1} \end{bmatrix} + \begin{bmatrix} v_0\\ v_1\\ \vdots\\ v_{n-1} \end{bmatrix} = \begin{bmatrix} u_0 + v_0\\ u_1 + v_1\\ \vdots\\ u_{n-1} + v_{n-1} \end{bmatrix} \in \mathbb{R}^n$$

والضرب بالقيمة القياسية $a \in \mathbb{R}$:

$$a\mathbf{v} = a \begin{bmatrix} v_0\\ v_1\\ \vdots\\ v_{n-1} \end{bmatrix} = \begin{bmatrix} av_0\\ av_1\\ \vdots\\ av_{n-1} \end{bmatrix} \in \mathbb{R}^n$$

وتنطبق عليها خصائص المتجهات الجبرية الأخرى التي أشرت لها سابقاً، الخصائص المشتقة من الجمع:

  • خاصية التجميع $(\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w})$
  • خاصية التبديل $\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}$
  • وجود المتجه الصفري الذي يرمز له $\mathbf{0}$ والذي يحقق العلاقة $\mathbf{0} + \mathbf{v} = \mathbf{v}$، المتجه الصفري هنا متجه مركب من أصفار $\mathbf{0} = (0, 0, \cdots, 0)$
  • وجود المعكوس الجمعي الذي يحقق العلاقة $\mathbf{v} + (\mathbf{-v}) = \mathbf{0}$

الخصائص المشتقة من الضرب بالقيمة القياسية:

  • خاصية التجميع الضربي $(ab)\mathbf{v}=a(b\mathbf{v})$
  • خاصية التوزيع الضربي $(a + b)\mathbf{v} = a\mathbf{v} + b\mathbf{v}$ وكذلك $a(\mathbf{u} + \mathbf{v}) = a\mathbf{u} + a\mathbf{v}$
  • وجود القيمة القياسية التي تمثل المحايد الضربي والذي يحقق العلاقة $1\mathbf{v} = \mathbf{v}$

طبعاً يمكننا أيضاً طرح المتجات من بعض، وقسمتها على عدد صحيح.

أعتقد أن هذه العلاقات بسيطة وبديهية لأننا نعرفها من أبجديات الجبر على الأعداد الحقيقية، فالأعداد الحقيقية أيضاً فضاء إقليدي $\mathbb{R}^1 = \mathbb{R}$.

هناك عملية أخرى مهمة جداً وهي الضرب القياسي dot product وهي عملية ثنائية يرمز لها بنقطة "$\cdot$"، حيث أن ضرب المتجهين $\mathbf{u}, \mathbf{v} \in \mathbb{R}^n$ ضرب قياسي يعطي كمية قياسية $a \in \mathbb{R}$:

$$ \mathbf{u} \cdot \mathbf{v} = \begin{bmatrix} u_0 \\ u_1 \\ \vdots \\ u_{n-1} \end{bmatrix} \cdot \begin{bmatrix} v_0 \\ v_1 \\ \vdots \\ v_{n-1} \end{bmatrix} = \sum_{i=0}^{n-1}{u_i v_i} = u_0v_0 + u_1v_1 + \cdots + u_{n-1}v_{n-1} = a \in \mathbb{R} $$

فمثلاً $(3, 1) \cdot (4, 2) = 3 \times 4 + 1 \times 2 = 14$، خصائص الضرب القياسي:

  • ضرب المتجه بنفسه قياسياً يعطي دوماً قيمة موجبة أو صفر $\mathbf{v} \cdot \mathbf{v} \ge 0$، يعطي الصفر فقط إذا كان المتجهة صفري $\mathbf{v} \cdot \mathbf{v} = 0 \Leftrightarrow \mathbf{v} = \mathbf{0}$، لكن يمكن أن يكون سالب إذا ضرب المتجه مع متجه آخر
  • قابل للتوزيع كالضرب $(\mathbf{u} + \mathbf{v}) \cdot \mathbf{w} = \mathbf{u} \cdot \mathbf{w} + \mathbf{v} \cdot \mathbf{w}$
  • التجميع غير معرّف للضرب القياسي، فمثلاً $(\mathbf{u} \cdot \mathbf{v}) \cdot \mathbf{w}$ و $\mathbf{u} \cdot (\mathbf{v} \cdot \mathbf{w})$ ليس لها معنى، لأن أحد الحدين عدد صحيح ولايمكن ضرب كمية قياسية مع متجه ضرب قياسي، هذا يعني أنه لايمكننا ضرب سوى متجهين ضرب قياسي، لكنه قابل للتجميع إذا كان أحد الأطراف كمية قياسية $(a\mathbf{u}) \cdot \mathbf{v} = a(\mathbf{u} \cdot \mathbf{v})$
  • قابل للتبديل $\mathbf{u} \cdot \mathbf{v} = \mathbf{v} \cdot \mathbf{u}$
  • إذا كان $\mathbf{u} \cdot \mathbf{v} = 0$، فهذا يعني أن المتجه $\mathbf{u}$ عمودي هندسياً على $\mathbf{v}$، سنوضحها لاحقاً، حيث يكتب في بعض المراجع $\mathbf{u} \perp \mathbf{v}$، وتعني أن $\mathbf{u}$ عمودي على $\mathbf{v}$

هناك أيضاً norm المتجه، وهو تعميم لمفهوم القيمة المطلقة، ويعبر عنها $\left \| \mathbf{v} \right \|$، حيث أنها كمية قياسية $\mathbb{R}$ أكبر أو تساوي الصفر وتقابل (الخاصية الأولى من خصائص الضرب القياسي تضمن لنا أنه لايمكن أن يكون سالب):

$$\left \| \mathbf{v} \right \| = \sqrt{\mathbf{v} \cdot \mathbf{v}} \in \mathbb{R} \ge 0$$

كل هذه العمليات لها تفسير هندسي بجانب التفسير الجبري سنتحدث عنه بعد قليل.

التمثيل الهندسي للفضاء الإقليدي $\mathbb{R}^1$، $\mathbb{R}^2$، $\mathbb{R}^3$

يمكننا تمثيل الفضاء الإقليدي هندسياً، لكن أود أن أؤكد أن هذا مجرد تمثيل، صحيح أننا سنستخدم الجبر الخطي للرسوميات، لكن لاتخلط بين التمثيل الرسومي والتطبيق والمفهوم العام المجرّد، فمثلاً التمثيل الهندسي له معنى فقط إذا كانت الأبعاد أقل أو تساوي ثلاثة أبعاد، البعد الرابع ومابعده لايمكن تمثيله رسومياً، لكن يمكننا التعامل معه تعامل جبري مجرّد، وأحياناً التمثيل الرسومي ليس له معنى حتى لو كانت الأبعاد أقل أو تساوي ثلاثة، مثلاً لو قلنا أن المتجه $(2, 3)$ يمثل عدد البرتقالات والتفاحات، يمكننا جمع عدد البرتقالات مع البرتقالات والتفاحات مع التفاحات، ومضاعفتها، لكن قد لايكون هناك معنى عند تمثيلها رسومياً.

يمكننا تمثيل $\mathbb{R}^1$ كخط أعداد:

Image

ليس له أهمية كبيرة لنا، فمعظم عملنا في الرسوميات إما 2D أو 3D، لكن سنستخدمه لاحقاً لتوضيح بعض المفاهيم كالإستقاط.

يمكننا تمثيل $\mathbb{R}^2$ كسطح مستوي له عرض واتفاع، هناك عدة طرق يمكننا تمثيل المتجه $\mathbf{v} \in \mathbb{R}^2$ فيها، فيمكننا تمثيله مثلاً كسهم ينطلق من نقطة مرجعية كنقطة الأصل أو أي نقطة أخرى كحالة المتجه الأخضر، بحيث أن الإزاحة الأفقية والعمودية تمثل قيمة المتجه، أو كنقطة، أو صورة مركزها قيمة المتجه، هذا المركز يمكن أن يكون منتصف الصورة أو أطرافها، أو بأي طريقة مناسبة:

Image Image Image

سأعتمد هنا على $\mathbb{R}^2$ حصراً لتوضيح مفاهيم الجبر الخطي المستخدمة في الرسوميات نظراً لسهولة تمثيل الـ2D إلا إذا دعت الحاجة، كل مايمكننا عمله في الـ2D يمكن تعميمه بسهولة للـ3D عن طريق إضافة بعد آخر أو احداثي يمثل العمق.

الشيء الوحيد الذي يهم عند الانتقال للـ3D هو اتجاه الاحداثي الذي يمثل البعد الثالث، هناك معيارين شائعان لاتجاهما، فلو أخذنا الاحداثيات القياسية $x$ و $y$ و $z$ كمرجع (لايوجد أي شرط على تسمية الاحداثيات)، في كلا المعيارين الاحداثي الذي نسميه عادة $x$ يكون الخط الأفقي، والذي نسميه عادة $y$ يكون الخط العمودي، وهذا ثابت في كلا المعياريين، لكن الاحداثي الثالث الذي نسميه عادة $z$ إما أن يكون الجزء الموجب منه متوجه للخارج أو الداخل:

Image

انتبه أن $x$ و $y$ و $z$ في الصورة تشير للجهة الموجبة، وهي مجرد تسميات يمكننا تغييرها وحتى إعادة ترتيبها لما نريد، يسمى الاحداثي الأول في اليمين بإحداثي اليد اليمنى، والآخر بإحداثي اليد اليسرى، سبب التسمية عائد الى أنك لو جعلت الإبهام يشير للإحداثي الأول، والسبابة تشير للإحداثي الثاني، فالأصبع الوسطى ستشير للأعلى لو استخدمت اليد اليمنى، بينما ستشير للأسفل إن استخدمت اليد اليسرى، رغم أن إحداثي اليد اليمنى أكثر شيوعاً في كتب الرسوميات، إلا أنه لايوجد أي فرق آخر بينهما غير هذا، فقط اعتمد على معيار واثبت عليه، ويمكنك التحويل بينهما بسهولة.

المثلثات والزوايا

مفاهيم الزوايا والمثلثات والدوال المثلثية مهمة في الرسوميات وكذلك عند التمثيل الهندسي للمتجهات وعملياتها، لو لاحظت أي مثلث أنك مهما كبرته وصغرته مع الإبقاء على زواياه ثابته، فإن أطوال أضلاعه بديهياً ستختلف، لكن النسبة بين أطوال أضلاعه تبقى دوماً ثابتة، خذ مثلاً هذا المثلث القائم الزاوية:

Image

فلو كانت الزاوية $\theta={45}^{\circ}$، فالزاوية الأخرى يجب أن تكون ${90}^{\circ}-{45}^{\circ}={45}^{\circ}$ وذلك لأن مجوع زوايا المثلث دوماً ${180}^{\circ}$، لنقل أن طول ضلع المجاور $n$ للتعميم، فطول المقابل يجب أن يكون أيضاً $n$ في حال أن الزاوية $\theta={45}^{\circ}$، وطول الوتر يجب أن يكون $\sqrt{n^2+n^2} = n\sqrt{2}$ باستخدام نظرية فيثاغورس، فالنسبة بين الأضلاع لأي $n$:

$$ \begin{matrix} &\frac{o}{h}&=&\frac{n}{n\sqrt{2}} = \frac{1}{\sqrt{2}} &=& \frac{\sqrt{2}}{2}\\ &\frac{a}{h}&=&\frac{n}{n\sqrt{2}} = \frac{1}{\sqrt{2}} &=& \frac{\sqrt{2}}{2}\\ &\frac{o}{a}&=&\frac{n}{n} &=& 1 \end{matrix} $$

إذاً النسب بين تلك الأضلاع دوماً ثابت، هذا العلاقة بين الزوايا والتناسب الثابت بين أضلاع المثلث مهمة لدرجة أنها أعطيت اسماء:

$$ \begin{matrix} \frac{o}{h} \equiv \sin\\ \frac{a}{h} \equiv \cos\\ \frac{o}{a} \equiv \tan \end{matrix} $$

تلك العلاقات الأساسية هي كل ماتحتاج لتذكره، يمكنك تذكرها باستخدام الاختصار SOH-CAH-TOA، هناك أيضاً علاقات أخرى مشتقة من هذه الدوال وخواص جبرية يمكنك البحث عنها بنفسك، لكن تلك التفاصيل تهمك فقط في تبسيط الحل عند تطبيقه على الكمبيوتر ويمكنك استخدام WolframAlpha لمساعدتك، انتبه أن الدوال الزاوية في معظم لغات البرمجة تقبل الزاوية بالراديان وليس الدرجات، يمكن التحويل من راديان إلى زاوية والعكس هكذا:

$$\begin{matrix} r &=& \frac{d^{\circ}\pi}{{180}^{\circ}}\\ d^{\circ} &=& \frac{r{180}^{\circ}}{\pi} \end{matrix}$$

الزاوية في البسط تلغي زواية المقام لتعطي الراديان في المعادلة الأولى، والراديان في البسط سيلغي الراديان في المقام لتبقى الدرجة في الثانية.

الدوال الزاوية مهمة للغاية في الرسوميات، باستخدام هذا التناسب يمكننا حساب الكثير من الأشياء بمعرفة زاوية وطول ضلع واحد فقط، خذ مثلاً هذا المثال، لو كان لدينا عمود على الأرض طوله 30، ونريد حساب المسافة الازمة بيننا وبين أسفله بحيث تكون الزاوية من الأرض إلى قمة العمود ${15}^{\circ}$، لحلها يمكننا اعتبار العمود بأنه المقابل $o = 30$، والمسافة من سطح الأرض إلى أسفله المجاور $a$، ونعلم أن $\frac{o}{a} \equiv \tan$، يمكننا حل المعادلة $\tan{{15}^{\circ}} = \frac{o=30}{a}$ للحصول على قيمة $a$، والتي تساوي $a = \frac{30}{\tan{{15}^{\circ}}} \approx 111.96$، مثل هذه المشكلة التي يكون لدينا زاوية وضلع ستتكرر عدة مرات وستساعدنا الدوال الزاوية في حلها.

هناك أيضاً معكوس للدوال الزاوية، ويكتب بعدة طرق $\sin^{-1} \equiv \operatorname{asin} \equiv \operatorname{arcsin}$، لغات البرمجة تستخدم الاسم المبدؤ بـa، حيث إذا أعطيت معكوس الدالة القيمة الناتجة من الدالة ستعطيك الزاوية، مثال مع $\operatorname{acos}$:

$$\begin{matrix} \cos {90}^{\circ} &=& 0\\ \operatorname{acos} 0 &=& {90}^{\circ} \end{matrix}$$

هناك دالتين تجدها في معظم لغات البرمجة لحساب معكوس $\tan$ وهي $\operatorname{atan}x$ و $\operatorname{atan2}(y, x)$ لاحظ عدد المتغيرات والترتيب، حيث أن $\operatorname{atan2}(y, x)$ معرفة:

$$ \operatorname{atan2}(y,x) = \begin{cases} \arctan(\frac y x) &\text{if } x > 0, \\ \arctan(\frac y x) + \pi &\text{if } x < 0 \text{ and } y \ge 0, \\ \arctan(\frac y x) - \pi &\text{if } x < 0 \text{ and } y < 0, \\ +\frac{\pi}{2} &\text{if } x = 0 \text{ and } y > 0, \\ -\frac{\pi}{2} &\text{if } x = 0 \text{ and } y < 0, \\ \text{undefined} &\text{if } x = 0 \text{ and } y = 0. \end{cases} $$

حيث أنها تغلّف الدالة $\operatorname{atan}$، استخدم هذه النسخة إذا أمكنك، فهي أولاً تتفادى القسمة على الصفر إذا كانت قيمة $x=0$، وحتى إن كانت $x=0$ و $y=0$ فإنها تعيد صفر في معظم لغات البرمجة، لها ميزة أخرى بخصوص إشارة الزاوية سنذكرها بعد قليل عند حديثنا عن الإحداثي القطبي.

الشيء الذي قد يربك البعض هو عندما يخلطون بين مثلاً $\sin$ في سياق المثلثات والهندسة وبينها كدلة ذات الرسم البياني الذي يشبه الموجه، هذا الأخير يستخدم عندما ندرس مثلاً $f(x) = \sin{x}$ بصفتها دالة وبعض النظر عن تفسيرها الهندسي، لكن الأصل الذي ظهرت منه الدوال الزاوية هندسي.

تفسيرات هندسية للمتجهات والعمليات عليها

المتجه كطول واتجاه

المتجه يمكن تفسيره بأنه كمية ذات طول واتجاه، وهذا يظهر جلياً عندما نستخدم الإحداثي القطبي بدل الاحداثي الديكارتي العادي، حيث يمثل المتجه فيه بالصيغة:

Image

حيث أن الصف الأول يمثل طول المتجه، والصف الثاني المبدؤ برمز الزاوية $\angle$ يمثل زاويته، التحويل بين الإحداثيين سهل باستخدام خواص المثلثات ونظرية فيثاغورس (تأكد منها بنفسك)، فمن الديكارتي للقطبي:

$$ \begin{matrix} r &= \sqrt{x^2 + y^2}\\ \theta &= \operatorname{atan2}(y, x) \end{matrix} $$ ومن القطبي للديكارتي:

$$ \begin{matrix} x &= r\cos{\theta} \\ y &= r\sin{\theta} \end{matrix} $$

لاحظ أننا استخدمنا $\operatorname{atan2}$، فلو استخدمنا $\operatorname{atan}$ فستعطينا في المتجه الأزرق $\operatorname{atan}(-1.77/-1.77)= 45^{\circ}$، وهذا خطأ سببه أن القسمة ضيعت الإشارات السالبة قبل تمريرها إلى $\operatorname{atan}$، بينما $\operatorname{atan2}$ تأخذ الإشارة في الحسبان لتحديد الزاوية الصحيحة، هذه الميزة التي أشرت لها.

بالنسبة للمتجهات في $\mathbb{R}^3$، هناك إحداثي اسمه الاحداثي الكروي يشبه الإحداثي القطبي لكن مع إضافة زاوية ثانية، لكن لن نتطرق له.

العمليات الجبرية على المتجهات

عند جمع متجهين أو طرحهما، فالمتجه الثالث الناتج من الجمع سيكون موقع رأسه من نقطه الأصل في نفس الموقع النهائي لأحد المتجهين لو حركناهما بالتوازي مع أحدهما دون تغيير الزاوية كما يظهر في الصورة:

Image

طرح المتجه مهم خصوصاً عندما نتعامل مع المتجه كنقطه، ونريد المتجه أو السهم الذي يشير من النقطه الأولى إلى الثانية كما في الصورة (انتبه أننا نطرح الوجهة من المصدر وإلا فالإتجاه سيكون مقلوب):

Image

ضرب المتجه أو قسمته بعدد ثابت موجب سيغير طول المتجه دون تغيير زاويته، بينما السالب سيعمل نفس التأثير لكن مع قلب اتجاهه كما في الصورة:

Image

القيمة المطلقة للمتجه

القيمة المطلقة للمتجه $\mathbf{v} \in \mathbb{R}^2$ كالقيمة المطلقة للأعداد الحقيقية تعطي طول هذا المتجه من نقطة الأصل، فحسب التعريف، فإن:

$$\begin{align} \left \| \mathbf{v} \right \|& =\sqrt{\mathbf{v} \cdot \mathbf{v}}\\ &=\sqrt{v_0v_0 + v_1v_1}\\ &=\sqrt{v_0^2 + v_1^2} \end{align}$$

الحد الأخير ليس سوى طول القطر باستخدام نظرية فيثاغورس باستخدام المثلث الناتج من المتجه لو أسقطت خط عمودي من رأس السهم على المحور الأفقي، الموضوع ينطبق أيضاً على أي متجه $\mathbb{R}^n$، يمكنك إيجاد طول متجه في بعد رابع وأعلى حتى ولو لم تستطع رؤيته D:.

متجه الوحدة

هناك عملية مهمة جداً وهي تحويل المتجه لمتجه الوحدة الذي رمزه $\hat{\mathbf{v}}$ والذي طوله يساوي 1 ولكن بنفس اتجاه المتجه الأصلي باستخدام عملية تسمى vector normalization، حيث أن:

$$\hat{\mathbf{v}} = \frac{\mathbf{v}}{\left \| \mathbf{v} \right \|}$$

حيث نقسم المتجه على طوله، ونعلم أن ضرب المتجه وقسمته تغير طول المتجه، في هذه الحاله سينمكش أو يزيد طول المتجه ليصبح 1، لكن زاوية واتجاه المتجه هي نفسها.

عندما نحول المتجه لمتجه وحدة فهذا يعني أنه يهمنا اتجاه المتجه ولانريد طوله، إما لأن الطول لا أهمية له، أو أننا سنغير الطول بنفسنا عن طريق ضربه بعدد ثابت.

الضرب القياسي

الضرب القياسي وصفناه سابقاً وصف جبري، هناك أيضاً مكافئ هندسي حيث أنه:

$$\mathbf{u} \cdot \mathbf{v} = \left \| \mathbf{u} \right \| \left \| \mathbf{v} \right \| \cos{\theta}$$

حيث أن $\theta$ هي الزاوية بين المتجهين، هناك عدة طرق لاشتقاق هذه العلاقة، أبسطها ستجده على ProofWiki.

من هذه العلاقة نعرف مثلاً أن المتجهين لو كانا متعامدان فإن الزاوية بينهما ${90}^{\circ}$، ومن ثم ضربهما قياسياً يعطي صفر لأن $\cos{{90}^{\circ}} = 0$ ونعرف من أين تأتي الإشارة، فلو كانت الزاوية بينهما ${0}^{\circ} \le \theta \le {90}^{\circ}$ فإن $\mathbf{u} \cdot \mathbf{v} \ge 0$، وعدى هذا فهي سالبة، ولو كان المتجهين متجهي وحدة، فإن:

$$\mathbf{\hat{u}} \cdot \mathbf{\hat{v}} = \cos{\theta} \in [-1, 1]$$

وذلك لأن طولهما $\left \| \mathbf{\hat{v}} \right \| = \left \| \mathbf{\hat{u}} \right \| = 1$.

تمثيل المتجهات برمجياً

يمكن الاستفادة من دعم اللغة للـoperator overloading لجعل العمليات على المتجهات تبدو طبيعية مثل u + v و v * 2، مثلاً باستخدام C++:

struct Vector2 {
  Vector2(float x, float y) noexcept : x{x}, y{y}
  { }

  Vector2 operator+(const Vector2& rhs) const noexcept
  { return {x + rhs.x, y + rhs.y}; }

  Vector2 operator*(float scalar) const noexcept
  { return {x * scalar, y * scalar}; }

  float Dot(const Vector2& rhs) const noexcept
  { return std::sqrt(x * rhs.x + y * rhs.y); }

  ...

  float x;
  float y;
};

المتجهات تستفيد من تعليمات الـSIMD مثل SSE في C/C++، لذا فعلها للاستفادة منها.

الخاتمة

في هذا المقال تحدثنا عن المتجهات والعمليات عليها، في المقال القادم سنتحدث عن المعادلات الخطية والتراكيب الخطية للمتجهات والمصفوفات، بقيت تفاصيل صغيرة تخص المتجهات مثل الضرب المتجهي cross product أرى أنه من الأفضل تأجيلها حتى نتحدث عن الأساسات.