קווטרניונים וסיבובים מרחביים

קווטרניוני יחידה, שידועים גם בשם ורסורים, מספקים סימון מתמטי נוח לייצוג אוריינטציות וסיבובים של גופים במרחב תלת-ממדי. בהשוואה לזוויות אוילר הם פשוטים יותר להרכבה ומאפשרים להימנע מהבעיה של סינגולריות במצבים מסוימים. בהשוואה למטריצות סיבוב הם קומפקטיים יותר, יותר יציבים נומרית, ויותר יעילים. לקווטרניונים יש יישומים בגרפיקה ממוחשבת, ראייה ממוחשבת, רובוטיקה, ניווט, דינמיקה מולקולרית, בקרת טיסה, מכניקה מסלולית של לוויינים ועוד.

כאשר הם משמשים כדי לייצג סיבובים, קווטרניוני יחידה נקראים גם קווטרניוני סיבוב שכן הם מייצגים את חבורת הסיבוב (3)SO, באמצעות ההטלה מחבורת קווטרניוני היחידה על חבורת הסיבוב המוגדרת על ידי פעולת ההצמדה של הקווטרניונים על המרחב התלת-ממדי של קווטרניונים טהורים (גרעין ההטלה הוא מסדר 2). כאשר הם משמשים כדי לייצג אוריינטציה (מנח מרחבי בהשוואה למערכת ייחוס של קואורדינטות) הם מכונים קווטרניוני אוריינטציה.

== שימוש בקווטרניונים כדי לממש סיבובים תלת-ממדיים ==
ויזואליזציה של סיבוב באמצעות ציר וזווית סיבוב.
במרחב תלת-ממדי, לפי משפט הסיבובים של אוילר, כל סיבוב או סדרת סיבובים של גוף קשיח או מערכת קואורדינטות דרך נקודה קבועה, שקול לסיבוב יחיד בזווית <math>\theta</math> ביחס לציר סיבוב כלשהו (המכונה "ציר אוילר"). ציר אוילר מיוצג על ידי וקטור יחידה <math>\vec{u}</math>. לפיכך, כל סיבוב תלת-ממדי ניתן לייצוג באמצעות צירוף של וקטור <math>\vec{u}</math> וסקלר <math>\theta</math>. הקווטרניונים מספקים דרך נוחה לקודד את הצגת הציר-זווית הזאת ברביעיית מספרים, ומאפשרים לממש את הסיבוב המתאים על וקטור מיקום התחלתי נתון (המייצג נקודה ב-<math>R^3</math>).

וקטור אוקלידי כמו <math>(2,3,4)</math> או <math>(a_x,a_y,a_z)</math> ניתן לכתיבה כ-<math>2i + 3j + 4k</math> או <math>a_xi+a_yj+a_zk</math> כאשר
<math>i,j,k</math> מייצגים הן וקטורי יחידה במערכת קואורדינטות קרטזית והן קווטרניונים. סיבוב בזווית <math>\theta</math> מסביב לציר המוגדר על ידי וקטור היחידה

: <math>\vec{u} = (u_x, u_y, u_z) = u_x\mathbf{i} + u_y\mathbf{j} + u_z\mathbf{k}</math>

ניתן לייצוג כקווטרניון. הצגה כזו ניתנת להגדרה על ידי הרחבה של נוסחת אוילר באנליזה מרוכבת:

: <math> \mathbf{q} = e^{\frac{\theta}{2}{(u_x\mathbf{i} + u_y\mathbf{j} + u_z\mathbf{k})}} = \cos \frac{\theta}{2} + (u_x\mathbf{i} + u_y\mathbf{j} + u_z\mathbf{k}) \sin \frac{\theta}{2}</math>

ניתן להראות שניתן להפעיל את הסיבוב הרצוי על וקטור נתון <math>\mathbf{p} = (p_x, p_y, p_z) = p_x\mathbf{i} + p_y\mathbf{j} + p_z\mathbf{k}</math> במרחב תלת-ממדי, שאליו מתייחסים כאל קווטרניון אוריינטציה "טהור" עם חלק ממשי אפס, על ידי הצמדה של p על ידי q

: <math>\mathbf{p'} = \mathbf{q} \mathbf{p} \mathbf{q}^{-1}</math>

באמצעות מכפלת המילטון, כאשר <math>\mathbf{p'} = (p'_x, p'_y, p'_z) </math> הוא וקטור המיקום החדש של הנקודה לאחר הסיבוב. במימוש תוכניתי, ניתן להפעיל סיבוב רצוי על וקטור נתון באמצעות הגדרת קווטרניון שחלקו הווקטורי הוא p וחלקו הממשי הוא אפס ואז הכפלת הקווטרניונים. החלק הווקטורי של קווטרניון התוצאה מייצג את כיוון הווקטור החדש p′.

מתמטית, פעולה זאת מעתיקה את אוסף כל הקווטרניונים ה"טהורים" p (אלו שעם חלק ממשי אפס) - אשר מרכיבים מרחב תלת-ממדי בין הקווטרניונים- אל עצמו, באמצעות הסיבוב הרצוי מסביב לציר u, בזווית θ.

באופן כללי יותר, פעולת ההרכבה של שני סיבובים לכדי סיבוב יחיד והפעלתו על וקטור נתון מתקבלת על ידי הצמדת הווקטור במכפלה של הקווטרניונים המייצגים את שני הסיבובים, וניתן להראות שפעולה זאת שקולה להצמדת הווקטור בקווטרניון הראשון ולאחר מכן בקווטרניון השני:

:<math>\mathbf{p q} \vec{v} (\mathbf{p q})^{-1} = \mathbf{p q} \vec{v} \mathbf{q}^{-1} \mathbf{p}^{-1} = \mathbf{p} (\mathbf{q} \vec{v} \mathbf{q}^{-1}) \mathbf{p}^{-1}</math>,

הרכיב הסקלרי (ממשי) של התוצאה הוא בהכרח אפס.

הקווטרניון ההופכי של סיבוב נתון הוא קווטרניון המייצג את הסיבוב הנגדי, מכיוון ש-<math>\mathbf{q}^{-1} (\mathbf{q} \vec{v} \mathbf{q}^{-1}) \mathbf{q} = \vec{v}</math>. העלאה בריבוע של קווטרניון נתון מייצגת סיבוב בזווית כפולה ביחס לאותו ציר.

=== דוגמה חישובית ===
סיבוב של 120 מעלות ביחס לאלכסון הראשי של הקוביה מחליף באופן ציקלי בין i,j,k.
נתייחס לסיבוב f מסביב לציר <math>\vec{v} = \mathbf{i} + \mathbf{j} + \mathbf{k}</math>, עם זווית סיבוב של 120°, או <math>2\pi/3</math> רדיאנים:

:<math>\alpha = \dfrac{2 \pi}{3}</math>

האורך של <math>\vec{v}</math> הוא <math>\sqrt{3}</math>, וחצי זווית הסיבוב היא 60°. לפיכך אנו עוסקים בהצמדה על ידי קווטרניון היחידה:

:<math>\begin{array}{lll}
u
&=& \cos\dfrac{\alpha}{2} + \sin\dfrac{\alpha}{2}\cdot \dfrac{1}{\| \vec{v} \| }\vec{v}\\
&=& \cos \dfrac{\pi}{3} + \sin \dfrac{\pi}{3}\cdot \dfrac{1}{\sqrt{3}}\vec{v}\\
&=& \dfrac{1}{2} + \dfrac{\sqrt{3}}{2}\cdot \dfrac{1}{\sqrt{3}}\vec{v}\\
&=& \dfrac{1}{2} + \dfrac{\sqrt{3}}{2}\cdot \dfrac{\mathbf{i}+\mathbf{j}+\mathbf{k}}{\sqrt{3}}\\
&=& \dfrac{1 + \mathbf{i} + \mathbf{j} + \mathbf{k}}{2}
\end{array}</math>

אם f היא פונקציית הסיבוב, אז

:<math>f(a\mathbf{i} + b\mathbf{j} + c\mathbf{k}) = u (a\mathbf{i} + b\mathbf{j} + c\mathbf{k}) u^{-1}</math>

ניתן להוכיח בקלות שההופכי של קווטרניון יחידה מתקבל מהפיכת הסימן של החלקים המדומים שלו. כתוצאה,

:<math>u^{-1} = \dfrac{1- \mathbf{i} - \mathbf{j} - \mathbf{k}}{2}</math>

ו-

:<math>f(a\mathbf{i} + b\mathbf{j} + c\mathbf{k}) = \dfrac{1 + \mathbf{i} + \mathbf{j} + \mathbf{k}}{2}(a\mathbf{i} + b\mathbf{j} + c\mathbf{k}) \dfrac{1 - \mathbf{i} - \mathbf{j} - \mathbf{k}}{2}</math>

את ביטוי זה ניתן לפשט באמצעות הכללים הרגילים לאריתמטיקה של קווטרניונים ל-:

:<math>f(a\mathbf{i} + b\mathbf{j} + c\mathbf{k}) = c\mathbf{i} + a\mathbf{j} + b\mathbf{k}</math>

כצפוי, הסיבוב מייצג קובייה המקובעת בנקודה אחת ושמסתובבת ב-120° ביחס לאלכסון הראשי העובר דרך הנקודה הנתונה (שים לב כיצד שלושת הצירים i,j,k עוברים תמורה מעגלית).

== מטריצת הסיבוב הנגזרת מן הקווטרניונים ==
ניתן להמיר את פעולת הסיבוב המיוצגת על ידי הצמדה בקווטרניון סיבוב <math>\mathbf{p'} = \mathbf{q} \mathbf{p} \mathbf{q}^{-1}</math> (כאשר <math>\mathbf{q} = q_r + q_i \mathbf{i} + q_j \mathbf{j} + q_k \mathbf{k}</math>) למטריצת סיבוב תלת-ממדית המקיימת <math>\mathbf{p'} = \mathbf{R p}</math>, כאשר <math>\mathbf{R}</math> היא מטריצה בעלת הצורה:

: <math>\begin{align} \mathbf{R} &= \begin{bmatrix}
1 - 2s (q_j^2 + q_k^2) &
2s (q_i q_j - q_k q_r) &
2s (q_i q_k + q_j q_r) \\
2s (q_i q_j + q_k q_r) &
1 - 2s (q_i^2 + q_k^2) &
2s (q_j q_k - q_i q_r) \\
2s (q_i q_k - q_j q_r) &
2s (q_j q_k + q_i q_r) &
1 - 2s (q_i^2 + q_j^2)
\end{bmatrix} 
\end{align}
</math> 

כאן <math>s = ||q||^{-2}</math>, כך שאילו q הוא קווטרניון יחידה אז <math>s = 1^{-2} = 1</math>.

ניתן להגיע אל המטריצה הזאת בעזרת חשבון וקטורי ואלגברה ליניארית אם מבטאים את <math>\mathbf p</math> ו-<math>\mathbf q</math> באמצעות החלק הסקלרי והווקטורי שלהם ואז עושים שימוש בתהליך המתאר את פעולת קווטרניון הסיבוב <math>\mathbf q</math> על קווטרניון האוריינטציה p, שניתן בנוסחה: <math>\mathbf{p'} = \mathbf{q} \mathbf{p} \mathbf{q}^{-1}</math>. אם נכתוב את <math>\mathbf p</math> כ-<math>(0,\ \mathbf p)</math>, את <math>\mathbf p'</math> כ-<math>(0,\ \mathbf p')</math> ואת <math>\mathbf q</math> כ-<math>(q_r,\ \mathbf v)</math>, כאשר <math>\mathbf v = (q_i, q_j, q_k)</math>, אז משוואת ההצמדה הופכת ל-: <math>(0,\ \mathbf p') = (q_r,\ \mathbf v) (0,\ \mathbf p) s(q_r,\ -\mathbf v)</math>. באמצעות שימוש בנוסחה המתארת כפל קווטרניונים שמיוצגים בעזרת החלק הסקלרי והווקטורי שלהם,

: <math>(r_1,\ \vec{v}_1) (r_2,\ \vec{v}_2) = (r_1 r_2 - \vec{v}_1\cdot\vec{v}_2,\ r_1\vec{v}_2+r_2\vec{v}_1 + \vec{v}_1\times\vec{v}_2),</math>

(כאשר <math>\cdot</math> היא מכפלה סקלרית ו-<math>\times</math> היא מכפלה וקטורית), מקבלים שמשוואה זו ניתנת לכתיבה מחדש כ-:

:<math>
\begin{align}
(0,\ \mathbf p') =&\ ((q_r,\ \mathbf v) (0,\ \mathbf p)) s(q_r,\ -\mathbf v) \\
(0,\ \mathbf p') =&\ (q_r 0 - \mathbf v \cdot \mathbf p,\ q_r\mathbf p + 0\mathbf v + \mathbf v \times \mathbf p)s(q_r,\ -\mathbf v) \\
(0,\ \mathbf p') =&\ s(-\mathbf v \cdot \mathbf p,\ q_r\mathbf p + \mathbf v \times \mathbf p)(q_r,\ -\mathbf v) \\
(0,\ \mathbf p') =&\ s(-\mathbf v \cdot \mathbf p q_r - (q_r\mathbf p + \mathbf v \times \mathbf p)\cdot(-\mathbf v),\ (-\mathbf v \cdot \mathbf p)(-\mathbf v) + q_r(q_r\mathbf p + \mathbf v \times \mathbf p) + (q_r\mathbf p + \mathbf v \times \mathbf p)\times(-\mathbf v)) \\
(0,\ \mathbf p') =&\ s(-\mathbf v \cdot \mathbf p q_r + q_r\mathbf v\cdot\mathbf p,\ \mathbf v(\mathbf v \cdot \mathbf p) + q_r^2\mathbf p + q_r\mathbf v \times \mathbf p + \mathbf v\times(q_r \mathbf p + \mathbf v \times \mathbf p)) \\
(0,\ \mathbf p') =&\ (0,\ s(\mathbf v \otimes \mathbf v + q_r^2\mathbf{I} + 2 q_r[\mathbf v]_{\times} + [\mathbf v]_{\times}^2) \mathbf p),
\end{align}
</math>

כאשר <math>\otimes</math> היא סוג של מכפלה בין וקטורים הנקראת מכפלת החיצון , <math>\mathbf{I}</math> היא מטריצת היחידה ו-<math>[\mathbf v]_{\times}</math> היא המטריצה המייצגת של הטרנספורמציה אשר הפעלתה על הווקטור <math>\mathbf u</math> נותנת את תוצאת המכפלה הווקטורית <math>\mathbf v \times \mathbf u</math>.

מכיוון ש-<math>\mathbf p' = \mathbf{R}\mathbf p</math>, ניתן לזהות את <math>\mathbf{R}</math> כביטוי <math>s(\mathbf v \otimes \mathbf v + q_r^2\mathbf{I} + 2 q_r[\mathbf v]_{\times} + [\mathbf v]_{\times}^2)</math>, אשר תחת פיתוח מניב את התוצאה הרשומה בצורה מטריציונית לעיל.

== קווטרניונים וגאומטריה כדורית ==
תכונה מועילה של פורמליזם הקווטרניונים היא שבעזרתו ניתן לזהות בקלות את הסיבוב השקול הנגזר מהרכבת שני סיבובים מרחביים המיוצגים על ידי קווטרניוני סיבוב R<sub>B</sub> ו-R<sub>A</sub>, זאת שכן לאחר הכפלת הקווטרניונים ניתן לזהות מיידית את ציר הסיבוב השקול ואת זווית הסיבוב השקולה (מתקיים R<sub>C</sub> = R<sub>B</sub>R<sub>A</sub>).

נניח שהקווטרניון המקושר לסיבוב מרחבי R נבנה על סמך ציר הסיבוב שלו S וזווית הסיבוב <math>\varphi</math>. הקווטרניון ניתן על ידי <math display="block"> S = \cos\frac{\varphi}{2} + \sin\frac{\varphi}{2} \mathbf{S}</math> .

והרכבת הסיבוב R<sub>B</sub> עם R<sub>A</sub> היא הסיבוב R<sub>C</sub> = R<sub>B</sub>R<sub>A</sub> עם ציר סיבוב וזווית המוגדרת על ידי מכפלת הקווטרניונים <math display="block">A = \cos\frac{\alpha}{2} + \sin\frac{\alpha}{2} \mathbf{A}\quad
\text{and} \quad B=\cos\frac{\beta}{2}+ \sin\frac{\beta}{2}\mathbf{B},</math>

שהיא <math display="block"> C = \cos\frac{\gamma}{2} + \sin\frac{\gamma}{2} \mathbf{C}
=
\left(\cos\frac{\beta}{2} + \sin\frac{\beta}{2} \mathbf{B}\right) \left(\cos\frac{\alpha}{2} +
\sin\frac{\alpha}{2} \mathbf{A}\right).
</math>

ואם נפתח מכפלה זאת נקבל 

<math display="block">
\cos\frac{\gamma}{2}+\sin\frac{\gamma}{2} \mathbf{C} =
\left(\cos\frac{\beta}{2} \cos\frac{\alpha}{2} - 
\sin\frac{\beta}{2} \sin\frac{\alpha}{2} \mathbf{B} \cdot \mathbf{A}\right) + \left(\sin\frac{\beta}{2} \cos\frac{\alpha}{2} \mathbf{B} + 
\sin\frac{\alpha}{2} \cos\frac{\beta}{2} \mathbf{A} + 
\sin \frac{\beta}{2} \sin \frac{\alpha}{2} \mathbf{B}\times \mathbf{A}\right).
</math>

נוסחה זאת מתארת את ציר הסיבוב השקול, שנתון בחלק הווקטורי של מכפלת הקווטרניונים, ואת זווית הסיבוב השקולה, שנתונה בחלק הממשי של מכפלת הקווטרניונים. השוויון בין החלקים הממשיים של שני אגפי המשוואה האחרונה, <math display="block"> \cos\frac{\gamma}{2} = \cos\frac{\beta}{2} \cos\frac{\alpha}{2} - 
\sin\frac{\beta}{2} \sin\frac{\alpha}{2} \mathbf{B} \cdot \mathbf{A},</math>,
מבטא את הקשר הידוע כמשפט הקוסינוסים בגאומטריה כדורית.

=== הקשר למשולשים כדוריים ===
קיים קשר אלגנטי בין פעולת חבורת הסיבובים התלת-ממדיים על ספירת היחידה לבין המשולש הכדורי הנוצר על ידי הרכבת שני סיבובים מרחביים; אם נסמן ב-<math>P,P'</math> את נקודת החיתוך של שני צירי סיבוב עם ספירת היחידה וב-<math>\lambda,\lambda'</math> את זוויות הסיבוב המתאימות, בעוד שאת נקודת החיתוך של ציר הסיבוב השקול להרכבת שני הסיבובים עם ספירת היחידה נסמן ב-<math>P</math> ואת זווית הסיבוב השקולה ב-<math>\lambda</math>, אז הזוויות של המשולש הכדורי המוגדר על ידי שלושת הנקודות <math>P,P',P</math> הן בדיוק <math>\frac{\lambda}{2},\frac{\lambda'}{2},\frac{\lambda}{2}</math>.

== ראו גם ==
* אלגברת קווטרניונים (ובפרט אלגברת הקווטרניונים של המילטון)

== הערות שוליים ==

קטגוריה:אלגברה