متاح عن quaternions وفوائدها


من مترجم: بالضبط 175 سنة و 3 أيام مضت تم اختراع quaternions. تكريماً لموعد الجولة هذا ، قررت التقاط مادة تشرح هذا المفهوم بلغة واضحة.

ابتكر عالم الرياضيات الأيرلندي السير ويليام روان هاميلتون مفهوم الرباعيات يوم الاثنين 16 أكتوبر 1843 في دبلن بأيرلندا. ذهب هاميلتون وزوجته إلى الأكاديمية الملكية الأيرلندية ، وعبرا القناة الملكية فوق جسر بروم ، قام باكتشاف مذهل ، والذي خدشه على الفور على حجر الجسر.

ط 2 = ي 2 = ك 2 = أنا ي ك = - 1




لوحة تذكارية على جسر بروم على القناة الملكية تكريما لاكتشاف الصيغة الأساسية لتكاثر الأرباع.

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

المحتويات


  • 1. مقدمة
  • 2. الأعداد المركبة
    • 2.1. جمع وطرح الأعداد المركبة
    • 2.2. ضرب عدد مركّب بقيمة عدديّة
    • 2.3. نتاج الأعداد المركبة
    • 2.4. مربع الأعداد المركبة
    • 2.5. اقترن الأعداد المركبة
    • 2.6. القيمة المطلقة للرقم المركب
    • 2.7. قسمة رقمين معقدين
  • 3. الدرجات ط
  • 4. طائرة معقدة
    • 4.1. الدوارات
  • 5. رباعيات
    • 5.1. Quaternions كزوج مرتبة
    • 5.2. الجمع والطرح
    • 5.3. منتج Quaternion
    • 5.4. Quaternion الحقيقي
    • 5.5. الضرب العددي رباعي
    • 5.6. Quaternions نقية
    • 5.7. شكل رباعي إضافي
    • 5.8. Quaternion واحد
    • 5.9. شكل ثنائي رباعي
    • 5.10. أقارب مترافقة
    • 5.11. معيار رباعي
    • 5.12. تطبيع رباعي
    • 5.13. عكس رباعي
    • 5.14. منتج عددي رباعي
  • 6. يتحول
  • 7. الاستيفاء من quaternions
    • 7.1. SLERP
      • 7.1.1. فرق رباعي
      • 7.1.2. رفع رباعي السلطة
      • 7.1.3. فرق كسور
      • 7.1.4. عوامل للنظر فيها
    • 7.2. فرقة
  • 8. الخلاصة
  • 9. تنزيل العرض التوضيحي
  • 10. المراجع

ليس من الممكن أن نفهم تماما quaternions في 45 دقيقة.

تحتوي هذه المقالة على الكثير من الرياضيات ، لذا فهي ليست للجبناء.

مقدمة


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

في هذه المقالة لن أتحدث بالتفصيل عن مصفوفات التحول. يمكن العثور على تفاصيل عن مصفوفات التحويل في مقالتي عن المصفوفات .

في هذه المقالة ، أريد أن أتحدث عن طريقة بديلة لوصف اتجاه الجسم (الدوران) في الفضاء باستخدام الرباعيات.

الأعداد المركبة


من أجل فهم الرباعيات بالكامل ، نحتاج أولاً أن نفهم من أين أتوا. يقوم مبدأ رباعي على مفهوم نظام الأعداد المركبة.

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

× 2 + 1 = 0


لحل هذا التعبير ، نحتاج إلى ذكر ذلك × 2 = - 1 ، وهذا ، كما تعلمون ، مستحيل ، لأن مربع أي رقم (إيجابي أو سلبي) إيجابي دائمًا.

لم يتمكن علماء الرياضيات من التصالح مع حقيقة أن التعبير ليس له حل ، لذلك تم اختراع مفهوم جديد - رقم وهمي يمكن استخدامه لحل هذه المعادلات.

الرقم التخيلي كما يلي:

ط 2 = - 1


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

يمكن اعتبار مجموعة الأرقام الخيالية كـ  م و ر ح ب ب I .

مجموعة الأعداد المركبة (يشار إليها ب  م أ ت ح ب ب ج هو مجموع الأعداد الحقيقية والخيالية بالصيغة التالية:

z=a+bi  a،b in mathbbR،  i2=1


يمكن القول أيضًا أن جميع الأرقام الحقيقية معقدة b=0 ، وجميع الأرقام الخيالية معقدة a=0 .

جمع وطرح الأعداد المركبة


يمكن إضافة الأعداد المركبة وطرحها عن طريق جمع وطرح الأجزاء الحقيقية والخيالية.

إضافة:

(a1+b1i)+(a2+b2i)=(a1+a2)+(b1+b2)i


الطرح:

(a1+b1i)(a2+b2i)=(a1a2)+(b1b2)i


ضرب عدد مركّب بقيمة عدديّة


يتم ضرب العدد المركب في العدد بضرب كل عضو في العدد المركب في العدد:

 lambda(a+bi)= lambdaa+ lambdabi


نتاج الأعداد المركبة


بالإضافة إلى ذلك ، يمكن أيضًا مضاعفة الأعداد المركبة باستخدام القواعد الجبرية العادية.

\ بدء {array} {rcl} z_1 & = & (a_1 + b_1i) \\ z_2 & = & (a_2 + b_2i) \\ z_1z_2 & = & (a_1 + b_1i) (a_2 + b_2i) \\ & = & a_1a_2 + a_1b_2i + b_1a_2i + b_1b_2i ^ 2 \\ & = & (a_1a_2-b_1b_2) + (a_1b_2 + b_1a_2) i \ end {array}


مربع الأعداد المركبة


أيضا ، يمكن تربيع عدد مركب بضرب نفسه:

\ start {array} {rcl} z & = & (a + bi) \\ z ^ 2 & = & (a + bi) (a + bi) \\ & = & ((^ 2-b ^ 2) + 2abi \ end {array}


اقترن الأعداد المركبة


القيمة المترافقة لرقم مركب هي رقم مركب مع علامة متغيرة للجزء التخيلي ، يشار إليه على أنه  barz أو كيف z .

\ start {array} {rcl} z & = & (a + bi) \\ z ^ * & = & (a-bi) \ end {array}


إن ضرب عدد مركب بقيمته المترافقة يعطي نتيجة مثيرة للاهتمام.

\ start {array} {rcl} z & = & (a + bi) \\ z ^ * & = & (a-bi) \\ zz ^ * & = & (a + bi) (a-bi) \ \ & = & a ^ 2-abi + abi + b ^ 2 \\ & = & a ^ 2 + b ^ 2 \ end {array}


القيمة المطلقة للرقم المركب


يمكننا استخدام العدد المترافق للرقم المركب لحساب القيمة المطلقة (أو القاعدة أو المقدار ) للرقم المركب. القيمة المطلقة لرقم مركّب هي الجذر التربيعي لعدد مركّب مضروبًا في اقترانه . يشار إليه على أنه |z| :

\ start {array} {rcl} z & = & (a + bi) \\ | z | & = & \ sqrt {zz ^ *} \\ & = & \ sqrt {(a + bi) (a-bi)} \\ & = & \ sqrt {a ^ 2 + b ^ 2} \ end {array}


قسمة رقمين معقدين


لحساب حاصل قسمة رقمين معقدين ، نضرب البسط والمقام في العدد التقريبي للمقام.

\ start {array} {rcl} z_1 & = & (a_1 + b_1i) \\ z_2 & = & (a_2 + b_2i) \\ \ cfrac {z_1} {z_2} & = & \ cfrac {a_1 + b_1i} { a_2 + b_2i} \\ & = & \ cfrac {(a_1 + b_1i) (a_2-b_2i)} {(a_2 + b_2i) (a_2-b_2i)} \\ & = & \ cfrac {a_1a_2-a_1b_2i + b_1a_2i-bi ^ 2} {a_2 ^ 2 + b_2 ^ 2} \\ & = & \ cfrac {a_1a_2 + b_1b_2} {a_2 ^ 2 + b_2 ^ 2} + \ cfrac {b_1a_2-a_1b_2} {a_2 ^ 2 + b_2 ^ 2} i \ end {array}


درجات i


إذا ادعينا ذلك i2=1 ثم يجب أن يكون هناك إمكانية لإقامة i وإلى درجات أخرى.

\ بدء {array} {rrrrrrr} i ^ 0 & = & & & & & & & & 1 \\ i ^ 1 & = & & & & & & & i \\ i ^ 2 & = & & & & & & & -1 \\ i ^ 3 & = & ii ^ 2 & = & & & -i \\ i ^ 4 & = & i ^ {2} i ^ {2} & = & & & & 1 \\ i ^ 5 & = & ii ^ 4 & = & & & i \\ i ^ 6 & = & ii ^ 5 & = & i ^ 2 & = & -1 \ end {array}


إذا واصلنا تسجيل هذه السلسلة ، نلاحظ نمطًا (1،i،1،i،1، dots) .

ينشأ نمط مماثل مع زيادة في الدرجات السلبية.

\ ابدأ {array} {rcr} i ^ 0 & = & 1 \\ i ^ {- 1} & = & -i \\ i ^ {- 2} & = & -1 \\ i ^ {- 3} & = & i \\ i ^ {- 4} & = & 1 \\ i ^ {- 5} & = & -i \\ i ^ {- 6} & = & -1 \ end {array}


ربما رأيت بالفعل مثل هذا النمط في الرياضيات ، ولكن في الشكل (x،y،x،y،x، dots) ، والتي يتم الحصول عليها عن طريق تحويل النقطة 90 درجة عكس اتجاه عقارب الساعة على طائرة ديكارتية ثنائية الأبعاد ؛ الصف (x،y،x،y،x، dots) تم إنشاؤها عن طريق تحويل النقطة 90 درجة على مستوى ديكارتي ثنائي الأبعاد.


طائرة ديكارتية

طائرة معقدة


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


طائرة معقدة

كما ترى من الصف السابق ، يمكننا القول أنه إذا ضربنا العدد المركب في i ، ثم يمكننا تدوير العدد المركب على المستوى المركب بزيادات 90 درجة.

دعونا نتحقق مما إذا كان هذا صحيحًا. نأخذ نقطة تعسفية على متن الطائرة المعقدة p :

p=2+i


واضربها في i بعد أن تلقت q :

\ start {array} {rcl} p & = & 2 + i \\ q & = & pi \\ & = & (2 + i) i \\ & = & 2i + i ^ 2 \\ & = & - - 1 + 2i \ end {array}


الضرب q على i نحصل r :

\ start {array} {rcl} q & = & -1 + 2i \\ r & = & qi \\ & = & (-1 + 2i) i \\ & = & -i + 2i ^ 2 \\ & = & -2-i \ end {array}


ويتكاثر r على i نحصل s :

\ start {array} {rcl} r & = & -2-i \\ s & = & ri \\ & = & (-2-i) i \\ & = & -2i-i ^ 2 \\ & = & 1-2i \ end {array}


ويتكاثر s على i نحصل t :

\ start {array} {rcl} s & = & 1-2i \\ t & = & si \\ & = & (1-2i) i \\ & = & i-2i ^ 2 \\ & = & 2 + i \ end {array}


وحصلنا بالضبط على ما بدأنا به ( p ) إذا وضعنا هذه الأرقام المعقدة على المستوى المعقد ، نحصل على النتيجة التالية.


الأعداد المركبة على المستوى المعقد

الآن يمكننا التدوير على المستوى المركب وفي اتجاه عقارب الساعة ، بضرب الرقم المركب في i .

الدوارات


يمكننا أيضًا إجراء دورات عشوائية على المستوى المركب ، وتحديد الرقم المركب في الشكل التالي:

q= cos theta+i sin theta


عند ضرب أي عدد مركب في الدوار q نحصل على الصيغة العامة:

\ start {array} {rcl} p & = & a + bi \\ q & = & \ cos \ theta + i \ sin \ theta \\ pq & = & (a + bi) (\ cos \ theta + i \ sin \ theta) \\ a ^ {\ prime} + b ^ {\ prime} i & = & a \ cos \ theta-b \ sin \ theta + (a \ sin \ theta + b \ cos \ theta) i \ النهاية {array}


ما يمكن كتابته أيضًا في شكل مصفوفة:

\ start {bmatrix} a ^ {\ prime} & -b ^ {\ prime} \\ b ^ {\ prime} و ^ {\ prime} \ end {bmatrix} = \ start {bmatrix} \ cos \ theta & - \ sin \ theta \\ \ sin \ theta & \ cos \ theta \ end {bmatrix} \ start {bmatrix} a & -b \\ b & a \ end {bmatrix}


ما هي طريقة تحويل نقطة اعتباطية في عكس اتجاه عقارب الساعة على المستوى المعقد نسبة إلى الأصل.

رباعيات


بعد التعرف على نظام الأعداد المركبة والمستوى المعقد ، يمكننا إحضارها إلى مساحة ثلاثية الأبعاد ، إضافة إلى نظام الأرقام جنبًا إلى جنب مع i رقمين وهميين آخرين.

الرباعيات لها الشكل المعمم التالي

q=s+xi+yj+zk  s،x،y،z in mathbbR


حيث وفقًا لتعبير هاميلتون الشهير:

i2=j2=k2=ijk=1



\ start {array} {ccc} ij = k & jk = i & ki = j \\ ji = -k & kj = -i & ik = -j \ end {array}


قد تلاحظ أن العلاقة بين i ، j و k تشبه إلى حد كبير قواعد الضرب المتجهي للوحدات الديكارتية:

\ start {array} {ccc} \ mathbf {x} \ times \ mathbf {y} = \ mathbf {z} & \ mathbf {y} \ times \ mathbf {z} = \ mathbf {x} & \ mathbf { z} \ times \ mathbf {x} = \ mathbf {y} \\ \ mathbf {y} \ times \ mathbf {x} = - \ mathbf {z} & \ mathbf {z} \ times \ mathbf {y} = - \ mathbf {x} & \ mathbf {x} \ times \ mathbf {z} = - \ mathbf {y} \ end {array}


لاحظ هاميلتون أيضًا أن الأرقام الخيالية i ، j و k يمكن استخدامها لتمثيل ثلاثة ناقلات وحدة ديكارتية  mathbfi ،  mathbfj و  mathbfk بنفس خواص الأعداد الخيالية  mathbfi2= mathbfj2= mathbfk2=1 .


التمثيل البياني للخصائص  mathbfij ،  mathbfjk ،  mathbfki

تظهر الصورة أعلاه بيانيا العلاقة بين ناقلات الوحدة الديكارتي في النموذج  mathbfi ،  mathbfj و  mathbfk .

Quaternions كزوج مرتبة


يمكننا أيضًا تمثيل quaternions كزوج مرتبة:

q=[s، mathbfv]  s in mathbbR، mathbfv in mathbbR3


أين  mathbfv يمكن تمثيلها كمكوناتها الفردية:

q=[s،x mathbfi+y mathbfj+z mathbfk]  s،x،y،z in mathbbR


باستخدام هذا الإدخال ، يمكننا تمثيل السمات المشتركة للأرباع والأرقام المركبة بسهولة أكبر.

الجمع والطرح


يمكن إضافة القسائم وطرحها بشكل مشابه للأرقام المركبة:

\ start {array} {rcl} q_a & = & [s_a، \ mathbf {a}] \\ q_b & = & [s_b، \ mathbf {b}] \\ q_a + q_b & = & [s_a + s_b، \ mathbf {a} + \ mathbf {b}] \\ q_a-q_b & = & [s_a-s_b، \ mathbf {a} - \ mathbf {b}] \ end {array}


يعمل رباعي


يمكننا أيضًا التعبير عن ناتج رباعين:

\ start {array} {rcl} q_a & = & [s_a، \ mathbf {a}] \\ q_b & = & [s_b، \ mathbf {b}] \\ q_ {a} q_ {b} & = & [s_ {a} ، \ mathbf {a}] [s_ {b} ، \ mathbf {b}] \\ & = & (s_ {a} + x_ {a} i + y_ {a} j + z_ {a } ك) (s_ {b} + x_ {b} i + y_ {b} j + z_ {b} k) \\ & = & (s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}) \\ & & + (s_ {a} x_ {b} + s_ {b} x {a} + y_ {a} z_ {b } -y_ {b} z_ {a}) i \\ & & + (s_ {a} y_ {b} + s_ {b} y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) j \\ & & + (s_ {a} z_ {b} + s_ {b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) k \ end {array}


وهو ما يعطينا رباعًا آخر. إذا استبدلنا الأرقام الخيالية في التعبير السابق i ، j و k أزواج مرتبة (تعرف أيضًا باسم وحدات رباعي) ، ثم نحصل

i=[0، mathbfi] j=[0، mathbfj] k=[0، mathbfk]


واستبداله في التعبير الأصلي بـ [1، mathbf0]=1 نحصل على:

\ start {array} {rcl} [s_ {a} ، \ mathbf {a}] [s_ {b} ، \ mathbf {b}] & = & (s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}) [1، \ mathbf {0}] \\ & & + (s_ {a} x_ {b} + s_ {b } x {a} + y_ {a} z_ {b} -y_ {b} z_ {a}) [0 ، \ mathbf {i}] \\ & & + (s_ {a} y_ {b} + s_ { b} y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) [0 ، \ mathbf {j}] \\ & & + (s_ {a} z_ {b} + s_ {b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) [0، \ mathbf {k}] \ end {array}


بتوسيع هذا التعبير إلى مجموع أزواج مرتبة ، نحصل على:

\ بدء {array} {rcl} [s_ {a} ، \ mathbf {a}] [s_ {b} ، \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b} ، \ mathbf {0}] \\ & & + [0 ، (s_ {a} x_ {b} + s_ {b} x {a} + y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i}] \\ & & + [0 ، (s_ {a} y_ {b} + s_ {b } y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf {j}] \\ & & + [0 ، (s_ {a} z_ {b} + s_ { b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


إذا قمنا بالضرب في وحدة رباعية واستخلاص مكونات المتجه الشائعة ، فيمكننا إعادة كتابة هذه المعادلة على النحو التالي:

\ start {array} {rcl} [s_ {a} ، \ mathbf {a}] [s_ {b} ، \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b} ، \ mathbf {0}] \\ & & + [0 ، s_ {a} (x_ {b} \ mathbf {i } + y_ {b} \ mathbf {j} + z_ {b} \ mathbf {k}) + s_ {b} (x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ { a} \ mathbf {k}) \\ & & (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ { b} x_ {a}) \ mathbf {j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


تعطينا هذه المعادلة مجموع أزواج مرتبة. الزوج المرتبة الأول هو الرباعي المادي ، والثاني هو الرباعي النقي . يمكن دمج هذين الزوجين المرتبين في زوج واحد مرتب:

\ start {array} {rcl} [s_ {a} ، \ mathbf {a}] [s_ {b} ، \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b} ، \\ & & s_ {a} (x_ {b} \ mathbf {i} + y_ {b} \ mathbf {j } + z_ {b} \ mathbf {k}) + s_ {b} (x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ {a} \ mathbf {k}) \\ & & + (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf { j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


إذا استبدلت ، نحصل

\ start {array} {rcl} \ mathbf {a} & = & x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ {a} \ mathbf {k} \\ \ mathbf {b} & = & x_ {b} \ mathbf {i} + y_ {b} \ mathbf {j} + z_ {b} \ mathbf {k} \\ \ mathbf {a} \ cdot \ mathbf {b} & = & x_ {a} x_ {b} + y_ {a} y_ {b} + z_ {a} z_ {b} \\ \ mathbf {a} \ times \ mathbf {b} & = & (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf {j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k} \ end {array}


نحصل على:

[sa، mathbfa][sb، mathbfb]=[sasb mathbfa cdot mathbfb،sa mathbfb+sb mathbfa+ mathbfa times mathbfb]


هذه هي المعادلة العامة لمنتج رباعيات.

Quaternion الحقيقي


الرباعي الحقيقي هو الرباعي الذي يتجه إليه ناقل  mathbf0 :

q=[s، mathbf0]


وينتج عن حالتين ماديتين رباعي مادي آخر:

\ start {array} {rcl} q_a & = & [s_a، \ mathbf {0}] \\ q_b & = & [s_b، \ mathbf {0}] \\ q_ {a} q_ {b} & = & [s_a ، \ mathbf {0}] [s_b ، \ mathbf {0}] \\ & = & [s_ {a} s_ {b} ، \ mathbf {0}] \ end {array}


وهو مماثل لمنتج رقمين معقدين يحتويان على المصطلح الخيالي الصفري.

\ start {array} {rcl} z_1 & = & a_1 + 0i \\ z_2 & = & a_2 + 0i \\ z_ {1} z_ {2} & = & (a_1 + 0i) (a_2 + 0i) \\ & = & a_ {1} a_ {2} \ end {array}


الضرب العددي رباعي


يمكننا أيضًا ضرب الرباعية في عددي ، مع الالتزام بالقاعدة التالية:

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ \ lambda {q} & = & \ lambda [s، \ mathbf {v}] \\ & = & [\ lambda {s}، \ lambda \ mathbf {v}] \ end {array}


يمكننا التحقق من ذلك باستخدام منتج quaternions الحقيقي الموضح أعلاه عن طريق ضرب quaternion في عددي مثل quaternion الحقيقي :

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ \ lambda & = & [\ lambda، \ mathbf {0}] \\ \ lambda {q} & = & [ \ lambda، \ mathbf {0}] [s، \ mathbf {v}] \\ & = & [\ lambda {s}، \ lambda \ mathbf {v}] \ end {array}


Quaternions نقية


بالإضافة إلى الأرباع المادية ، عرّف هاميلتون أيضًا الكواتون النقي بأنه رباعي بمصطلح عددي:

q=[0، mathbfv]


أو إذا قمت بتدوين المكونات:

q=xi+yj+zk


ومرة أخرى يمكننا أخذ منتج رباعين نقيين:

\ start {array} {rcl} q_a & = & [0، \ mathbf {a}] \\ q_b & = & [0، \ mathbf {b}] \\ q_ {a} q_ {b} & = & [0 ، \ mathbf {a}] [0 ، \ mathbf {b}] \\ & = & [- \ mathbf {a} \ cdot \ mathbf {b} ، \ mathbf {a} \ times \ mathbf {b} ] \ end {array}


وفقًا لقاعدة المنتج الرباعية المقدمة أعلاه.

شكل رباعي إضافي


بالإضافة إلى ذلك ، يمكننا التعبير عن الرباعيات على أنها مجموع الأجزاء الحقيقية والنقية من الرباعية:

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ & = & [s، \ mathbf {0}] + [0، \ mathbf {v}] \ end {المصفوفة }


Quaternion واحد


أخذ ناقل تعسفي  mathbfv يمكن التعبير عن هذا الناقل من حيث القيمة العددية واتجاهه على النحو التالي:

 mathbfv=v mathbf hatv  textحيث v=| mathbfv|  textand | mathbf hatv|=1


بدمج هذا التعريف مع تعريف رباعي خالص ، نحصل على:

\ start {array} {rcl} q & = & [0، \ mathbf {v}] \\ & = & [0، v \ mathbf {\ hat {v}}] \\ & = & v [0، \ mathbf {\ hat {v}}] \ end {array}


يمكننا أيضًا وصف وحدة رباعية مع عددي صفر ومتجه وحدة:

 hatq=[0، mathbf hatv]


شكل ثنائي رباعي


يمكننا الآن الجمع بين تعريفات quaternion المنفردة والشكل الإضافي quounion ، والحصول على شكل من quaternions يشبه الترميز المستخدم في وصف الأعداد المركبة:

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ & = & [s، \ mathbf {0}] + [0، \ mathbf {v}] \\ & = & [s، \ mathbf {0}] + v [0، \ mathbf {\ hat {v}}] \\ & = & s + v \ hat {q} \ end {array}


مما يمنحنا طريقة لتمثيل رباعي في شكل مشابه جدًا للأرقام المعقدة:

\ start {array} {rcl} z & = & a + bi \\ q & = & s + v \ hat {q} \ end {array}


العدد المترافق للربع


يمكن حساب العدد المترافق للرباعي بأخذ الجزء المتجه من الرباعي المقابل في العلامة:

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ q ^ * & = & [s، - \ mathbf {v}] \ end {array}


يعطينا ناتج رباعي الأرجل والرقم المرافق له ما يلي:

\ start {array} {rcl} qq ^ * & = & [s، \ mathbf {v}] [s، - \ mathbf {v}] \\ & = & & [s ^ 2- \ mathbf {v} \ cdot- \ mathbf {v} ، - s \ mathbf {v} + s \ mathbf {v} + \ mathbf {v} \ times- \ mathbf {v}] \\ & = & [s ^ 2 + \ mathbf { v} \ cdot \ mathbf {v} ، \ mathbf {0}] \\ & = & [s ^ 2 + v ^ 2 ، \ mathbf {0}] \ end {array}


معدل رباعي


تذكر تعريف قاعدة العدد المركب:

\ البدء {array} {rcl} | z | & = & \ sqrt {a ^ 2 + b ^ 2} \\ zz ^ * & = & | z | ^ 2 \ end {array}


وبالمثل ، يتم تعريف معيار (أو حجم) رباعي كالتالي:

\ start {array} {rcl} q & = & [s، \ mathbf {v}] \\ | q | & = & \ sqrt {s ^ 2 + v ^ 2} \ end {array}


مما يسمح لنا بالتعبير عن معيار رباعي كما يلي:

qq=|q|2


تطبيع رباعي


إذا كان لدينا تعريف لمعيار الرباعي ، يمكننا استخدامه لتطبيع الرباعي. يتم تطبيع الرباعية عن طريق القسمة على |q| :

q prime= fracq sqrts2+v2


على سبيل المثال ، دعونا تطبيع الرباعي:

q=[1،4 mathbfi+4 mathbfj4 mathbfk]


نحتاج أولاً إلى حساب معدل quaternion:

\ start {array} {rcl} | q | & = & \ sqrt {1 ^ 2 + 4 ^ 2 + 4 ^ 2 + (- 4) ^ 2} \\ & = & \ sqrt {49} \\ & = & 7 \ end {array}


ثم يجب أن نقسم الكورون على قاعدة الكواتون من أجل حساب الكواتون المقيس:

\ start {array} {rcl} q ^ {\ prime} & = & \ cfrac {q} {| q |} \\ [1.0em] & = & \ cfrac {(1 + 4 \ mathbf {i} + 4 \ mathbf {j} -4 \ mathbf {k})} {7} \\ [1.0em] & = & \ cfrac {1} {7} + \ cfrac {4} {7} \ mathbf {i} + \ cfrac {4} {7} \ mathbf {j} - \ cfrac {4} {7} \ mathbf {k} \ end {array}


عكس رباعي


يشار إلى الرباعية العكسية على أنها q1 . لحساب الرباعية العكسية ، نأخذ العدد المترافق للربعين ونقسمه على مربع القاعدة:

q1= fracq|q|2


لإظهار ذلك ، يمكننا استخدام التعريف العكسي:

qq1=[1، mathbf0]=1


وضرب كلا الجانبين بالعدد المترافق للرباعي الذي سيعطينا:

qqq1=q


عن طريق الاستبدال نحصل على:

\ start {array} {rcl} | q | ^ {2} q ^ {- 1} & = & q ^ {*} \\ q ^ {- 1} & = & \ cfrac {q ^ {*}} {| q | ^ {2}} \ end {array}


بالنسبة لمعايير الرباعية الفردية التي تكون قاعدتها 1 ، يمكننا كتابة:

q1=q


منتج عددي رباعي


على نحو مماثل للمنتج العددي للمتجهات ، يمكننا حساب الناتج القياسي لربعين من خلال ضرب الأجزاء العددية المقابلة وجمع النتائج:

\ start {array} {rcl} q_1 & = & [s_1، x_1 \ mathbf {i} + y_1 \ mathbf {j} + z_1 \ mathbf {k}] \\ q_2 & = & [s_2، x_2 \ mathbf { i} + y_2 \ mathbf {j} + z_2 \ mathbf {k}] \\ q_1 {\ cdot} q_2 & = & s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2} \ end {array}


يمكننا أيضًا استخدام المنتج العددي للربعين لحساب الفرق الزاوي بين الربعين:

 cos theta= fracs1s2+x1x2+y1y2+z1z2|q1||q2|


بالنسبة للمعايير الفردية ، يمكننا تبسيط المعادلة:

 cos theta=s1s2+x1x2+y1y2+z1z2


يتحول


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

q= cos theta+i sin theta


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

q=[ cos theta، sin theta mathbfv]


دعونا نتحقق مما إذا كانت هذه النظرية صحيحة عن طريق حساب منتج quaternion q والمتجه  mathbfp . أولا ، يمكننا التعبير  mathbfp كرباعي نقي على النحو التالي:

p=[0، mathbfp]


أ q هو معيار رباعي واحد في الشكل:

q=[s، lambda mathbf hatv]


ثم

\ start {array} {rcl} p ^ {\ prime} & = & qp \\ & = & [s، \ lambda \ mathbf {\ hat {v}}] [0، \ mathbf {p}] \\ & = & [- \ lambda \ mathbf {\ hat {v}} \ cdot \ mathbf {p} ، s \ mathbf {p} + \ lambda \ mathbf {\ hat {v}} \ times \ mathbf {p}] \ end {array}


نرى أن النتيجة هي رباعي مشترك مع الأجزاء العددية والمتجهية.

دعونا أولاً نلقي نظرة على حالة "خاصة"  mathbfp عمودي  mathbf hatv . في هذه الحالة ، عضو المنتج العددي  lambda mathbf hatv cdot mathbfp=0 وتصبح النتيجة رباعي خالص :

p prime=[0،s mathbfp+ lambda mathbf hatv times mathbfp]


في هذه الحالة ، لتتحول  mathbfp بخصوص  mathbf hatv نحن فقط نستبدل s= cos theta و  lambda= sin theta .

p prime=[0، cos theta mathbfp+ sin theta mathbf hatv times mathbfp]


على سبيل المثال ، دعنا ندير المتجه  mathbfp 45 درجة بالنسبة للمحور Z ؛ ثم ربنا q ستكون مساوية لـ:

\ start {array} {rcl} q & = & [\ cos \ theta، \ sin \ theta \ mathbf {k}] \\ & = & \ left [\ frac {\ sqrt {2}} {2} ، \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right] \ end {array}


ولنأخذ ناقلات  mathbfp التي تتعلق بحالة خاصة حيث  mathbfp عمودي  mathbfk :

p=[0.2 mathbfi]


الآن دعنا نجد قطعة

qp

:

\ start {array} {rcl} p ^ {\ prime} & = & qp \\ & = & \ left [\ frac {\ sqrt {2}} {2} ، \ frac {\ sqrt {2}} { 2} \ mathbf {k} \ right] [0.2 \ mathbf {i}] \\ & = & \ left [0.2 \ frac {\ sqrt {2}} {2} \ mathbf {i} +2 \ frac {\ sqrt {2}} {2} \ mathbf {k} \ times \ mathbf {i} \ right] \\ & = & [0، \ sqrt {2} \ mathbf {i} + \ sqrt {2 } \ mathbf {j}] \ end {array}


ما يعطينا رباعيًا نظيفًا يدور 45 درجة حول المحور  mathbfk . يمكننا أيضًا التأكد من الحفاظ على قيمة المتجه النهائي:

\ start {array} {rcl} | \ mathbf {p} ^ {\ prime} | & = & \ sqrt {\ sqrt {2} ^ {2} + \ sqrt {2} ^ {2}} \\ & = & 2 \ end {array}


بالضبط ما كنا نتوقعه!

يمكننا عرض هذا بيانيا بالصورة التالية:


تدوير Quaternion (1)

الآن دعونا نلقي نظرة على رباعي غير متعامد  mathbfp . إذا أخذنا في الجزء المتجه من الرباعية إزاحة 45 درجة من  mathbfp ثم نحصل على:

\ start {array} {rcl} \ mathbf {\ hat {v}} & = & \ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2 } \ mathbf {k} \\ \ mathbf {p} & = & 2 \ mathbf {i} \\ q & = & [\ cos \ theta، \ sin \ theta \ mathbf {\ hat {v}}] \\ p & = & [0، \ mathbf {p}] \ end {array}


وضرب ناقلات لدينا  mathbfp على q نحصل على:

\ start {array} {rcl} p ^ {\ prime} & = & qp \\ & = & [\ cos \ theta، sin \ theta \ mathbf {\ hat {v}}] [0، \ mathbf {p }] \\ & = & [- \ sin \ theta \ mathbf {\ hat {v}} \ cdot \ mathbf {p} ، \ cos \ theta \ mathbf {p} + \ sin \ theta \ mathbf {\ hat { v}} \ times \ mathbf {p}] \ end {array}


بعد الاستبدال  mathbf hatv ،  mathbfp و  theta=45 circ نحصل على:

\ start {array} {rcl} p ^ {\ prime} & = & \ left [- \ frac {\ sqrt {2}} {2} \ left (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right) \ cdot (2 \ mathbf {i}) ، \ frac {\ sqrt {2}} {2} 2 \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ left (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right) \ times2 \ mathbf {i} \ right] \\ & = & [-1، \ sqrt {2} \ mathbf {i} + \ mathbf {j}] \ end {array}


أي أنه لم يعد رباعيًا نقيًا ، ولم يدور 45 درجة ولم يعد معيار المتجه يساوي 2 (انخفض إلى  sqrt3 )

يمكن عرض هذه النتيجة بيانيا.


دور رباعي (2)

بالمعنى الدقيق للكلمة ، من الخطأ تمثيل رباعي p prime في الفضاء ثلاثي الأبعاد ، لأنه في الواقع متجه رباعي الأبعاد! من أجل البساطة ، سأعرض فقط مكون المتجه من quaternions.

ومع ذلك ، لا يضيع كل شيء. اكتشف هاملتون (لكنه لم ينشر هذا) أنه إذا قمنا بعد ذلك بضرب النتيجة qp إلى القيمة المعاكسة q ، ستكون النتيجة رباعيًا نقيًا ، وسيتم الحفاظ على معيار مكون المتجه. دعونا نرى ما إذا كان يمكن تطبيق ذلك في مثالنا.

أولاً ، دعنا نحسب q1 :

\ start {array} {rcl} q & = & \ left [\ cos \ theta، \ sin \ theta \ left (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right) \ right] \\ q ^ {- 1} & = & \ left [\ cos \ theta، - \ sin \ theta \ left (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right) \ right] \ end {array}


في  theta=45 circ نحصل على:

\ start {array} {rcl} q ^ {- 1} & = & \ left [\ frac {\ sqrt {2}} {2} ، - \ frac {\ sqrt {2}} {2} \ left ( \ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ right) \ right] \\ & = & \ frac {1 } {2} \ left [\ sqrt {2} ، - \ mathbf {i} - \ mathbf {k} \ right] \ end {array}


دمج القيمة السابقة qp و q1 نحصل على:

\ start {array} {rcl} qp & = & \ left [-1، \ sqrt {2} \ mathbf {i} + \ mathbf {j} \ right] \\ qpq ^ {- 1} & = & \ يسار [-1، \ sqrt {2} \ mathbf {i} + \ mathbf {j} \ right] \ frac {1} {2} \ left [\ sqrt {2}، - \ mathbf {i} - \ mathbf {k} \ right] \\ & = & \ frac {1} {2} \ left [- \ sqrt {2} - \ left (\ sqrt {2} \ mathbf {i} + \ mathbf {j} \ right ) \ cdot (- \ mathbf {i} - \ mathbf {k}) ، \ mathbf {i} + \ mathbf {k} + \ sqrt {2} \ left (\ sqrt {2} \ mathbf {i} + \ mathbf {j} \ right) - \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ right] \\ & = & \ frac {1} {2} \ left [- \ sqrt {2} + \ sqrt {2} ، \ mathbf {i} + \ mathbf {k} +2 \ mathbf {i} + \ sqrt {2} \ mathbf {j} - \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ right] \\ & = & \ left [0، \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ يمين] \ end {array}


وهو رباعي خالص ، وقاعدة النتيجة هي:

\ start {array} {rcl} | p ^ {\ prime} | & = & \ sqrt {1 ^ 2 + \ sqrt {2} ^ 2 + 1 ^ 2} \\ & = & \ sqrt {4} \\ & = & 2 \ end {array}


وهو يساوي  mathbfp ، أي أنه يتم الحفاظ على معيار المتجه.

توضح الصورة أدناه نتيجة الدوران.


دور رباعي (3)

نرى أن النتيجة هي رباعي خالص ، ويتم الحفاظ على معيار المتجه الأصلي ، لكن المتجه استدار 90 درجة ، وليس 45 درجة ، وهو ضعف ما هو ضروري! لذلك ، من أجل الدوران الصحيح للمتجه  mathbfp على الزاوية  theta نسبة إلى المحور التعسفي  mathbf hatv نحتاج أن نأخذ نصف الزاوية وننشئ الرباعية التالية:

q= left[ cos frac12 theta، sin frac12 theta mathbf hatv right]


ما هي نظرة عامة عن تحول رباعي!

الاستيفاء الرباعي


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

باستخدام quaternions ، يمكننا تحديد العديد من الطرق التي تمثل استيفاء الدوران في الفضاء ثلاثي الأبعاد. الطريقة الأولى التي أفكر فيها تسمى SLERP . يتم استخدامه لتقريب نقطة بسلاسة بين اتجاهين. الطريقة الثانية هي تطوير SLERP وتسمى SQUAD . يتم استخدامه للاستيفاء على طول سلسلة من التوجهات التي تحدد المسار.

SLERP


يشير SLERP إلى الاستيفاء الكروي L inear (الاستيفاء الخطي الكروي). يوفر SLERP القدرة على الاستيفاء السلس لنقطة بين اتجاهين.

سأحدد التوجه الأول على النحو q1 ، والثاني باسم q2 . يشار إلى النقطة محرف من قبل  mathbfp ، يشار إلى النقطة محرف من قبل  mathbfp prime . معلمة الاستيفاء t سوف الاستيفاء  mathbfp من q1 في t=0 من قبل q2 في t=1 .

الصيغة المعيارية للاستكمال الخطي هي:

 mathbfp prime= mathbfp1+t( mathbfp2 mathbfp1)


فيما يلي الخطوات الأساسية لتطبيق هذه المعادلة:

  • نحسب الفرق بين  mathbfp1 و  mathbfp2 .
  • خذ الجزء الكسري من هذا الاختلاف.
  • صحح القيمة الأولية بالفرق الكسري بين النقطتين.

يمكننا استخدام نفس المبدأ الأساسي للاستيفاء بين اتجاهين من quaternions.

فرق رباعي


الخطوة الأولى تعني أننا بحاجة إلى حساب الفرق بين q1 و q2 . في سياق الأرباع ، يشبه هذا حساب الفرق الزاوي بين فصلين.

 Deltaq=q11q2


رفع رباعي السلطة


الخطوة التالية هي أخذ الجزء الكسري من هذا الاختلاف. يمكننا حساب الجزء الكسري من الرباعي برفعه إلى قوة ذات قيمة في النطاق [0...1] .

تتضمن الصيغة العامة لرفع الرباعية إلى السلطة الشكل التالي:

qt= exp(t logq)


حيث تبدو الوظيفة الأسية للرباعيات كما يلي:

\ start {array} {rcl} \ exp (q) & = & \ exp \ left ([0، \ theta \ mathbf {\ hat {v}}] \ right) \\ & = & [\ cos \ theta ، \ sin \ theta \ mathbf {\ hat {v}}] \ end {array}


ولوغاريتم رباعي الشكل:

\ start {array} {rcl} \ log {q} & = & \ log (\ cos \ theta {+} \ sin \ theta \ mathbf {\ hat {v}}) \\ & = & \ log \ left (\ exp (\ theta \ mathbf {\ hat {v}}) \ right) \\ & = & \ theta \ mathbf {\ hat {v}} \\ & = & [0، \ theta \ mathbf {\ hat {v}}] \ end {array}


في t=0 لدينا ما يلي:

\ start {array} {rcl} q ^ 0 & = & \ exp (0 \ log {q}) \\ & = & \ exp ([\ cos (0)، \ sin (0) \ mathbf {\ hat {v}}]) \\ & = & \ exp ([1، \ mathbf {0}]) \\ & = & [1، \ mathbf {0}] \ end {array}


ومتى t=1 لدينا

\ start {array} {rcl} q ^ 1 & = & \ exp (\ log {q}) \\ & = & q \ end {array}


فرق كسور


لحساب الدوران الزاوي المحرف ، نقوم بتغيير الاتجاه الأولي q1 إلى الجزء الكسري من الفرق بين q1 و q2 .

q prime=q1 يسار(q11q2 يمين)t


ما هي نظرة عامة على الاستيفاء الخطي الكروي للرباعيات. ومع ذلك ، ليس هذا هو نوع معادلة SLERP التي يتم استخدامها بشكل شائع في الممارسة.

يمكننا تطبيق صيغة مماثلة لإجراء الاستيفاء الكروي للمتجهات إلى quaternions. يتم تعريف الشكل العام للاستكمال الكروي للمتجهات على النحو التالي:

 mathbfvt= frac sin(1t) theta sin theta mathbfv1+ frac sint theta sin theta mathbfv2


بيانياً ، يمكن إظهار ذلك في الصورة التالية.


الاستيفاء الرباعي

يمكن تطبيق هذه الصيغة على quaternions دون تغييرات:

qt= frac sin(1t) theta sin thetaq1+ frac sint theta sin thetaq2


ويمكننا الحصول على الزاوية  theta حساب المنتج العددي q1 و q2 .

\ start {array} {rcl} \ cos \ theta & = & \ cfrac {q_1 {\ cdot} q_2} {| q_1 || q_2 |} \\ & = & & cfrac {s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2}} {| q_1 || q_2 |} \\ \ theta & = & \ cos ^ {- 1} \ left (\ cfrac {s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2}} {| q_1 || q_2 |} \ right) \ end {array}


عوامل للنظر فيها


لدى هذا التطبيق مشكلتين يجب مراعاتهما عند استخدامه.

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

تنشأ مشكلة أخرى إذا كان الفرق الزاوي بينq1 و q2 صغير جدا ، بينما sinθ يصبح 0. إذا حدث هذا ، فإن القسمة على sinθيمكننا الحصول على نتيجة غير مؤكدة. في هذه الحالة ، يمكنك العودة إلى استخدام الإقحام الخطي بينq1 و q2 .

فرقة


تمامًا كما يمكن استخدام SLERP للاستكمال الداخلي بين فصلين ، يمكن استخدام SQUAD ( S pherical و Quad range - كروية ورباعية الزوايا) للاستكمال الداخلي السلس على طول مسار الدوران.

إذا كان لدينا عدد من quaternions:

q1,q2,q3,,qn2,qn1,qn


وحددنا الرباعية "المساعدة" ( si ) ، والتي يمكن اعتبارها نقطة تحكم وسيطة:

si=exp(log(qi+1q1i)+log(qi1q1i)4)qi


يتم تعريف الاتجاه على طول جزء من المنحنى على النحو التالي:

qi1,qi,qi+1,qi+2


في الوقت ر أنه يعطينا:

squad(qi,qi+1,si,si+1,t)=slerp(slerp(qi,qi+1,t),slerp(si,si+1,t),2t(1t))


الخلاصة


على الرغم من صعوبة الفهم ، عند العمل مع المنعطفات ، توفر الأرباع المتعددة مزايا واضحة مقارنة بمصفوفات أويلر وزوايا.

  • SLERP SQUAD .
  • تسلسل التدوير باستخدام quaternions هو أسرع من الجمع بين الدورات التي تم التعبير عنها في شكل مصفوفة.
  • بالنسبة إلى الأرباع المعيارية الفردية ، يتم أخذ معكوس الدوران بطرح الجزء المتجه من الرباعي. حساب التبادلية لمصفوفة الدوران أبطأ بكثير إذا كانت المصفوفة ليست متعامدة (إذا كانت متعامدة ، فهذا مجرد تبديل للمصفوفة).
  • إن تحويل الرباعيات إلى مصفوفات أسرع قليلاً من زوايا أويلر.
  • لوصف الدوران ، تتطلب quaternions 4 أرقام فقط (3 إذا تم تطبيعها. يمكن حساب الجزء الحقيقي أثناء تنفيذ البرنامج) ، بينما تحتاج المصفوفات إلى 9 قيم على الأقل.

ومع ذلك ، إلى جانب جميع مزايا استخدام quaternions ، هناك أيضًا العديد من العيوب.

  • يمكن أن تصبح الرباعيات غير صالحة بسبب خطأ التقريب في أرقام الفاصلة العائمة ؛ ومع ذلك ، يمكن التخلص من هذا "التسلل بالخطأ" عن طريق إعادة تطبيع الرباعي.
  • ربما تكون أهم عقبة أمام استخدام quaternions هي التعقيد الشديد لفهمهم. آمل أن تحل هذه المشكلة عن طريق قراءة مقالتي.

هناك العديد من مكتبات الرياضيات التي تقوم بتنفيذ عمليات الفصل ، وبعضها فقط يقوم بتنفيذ عمليات الفصل بشكل صحيح. في تجربتي الخاصة ، مكتبة الرياضيات الجيدة مع تنفيذ عالي الجودة للرباعيات هي GLM (مكتبة الرياضيات OpenGL). إذا كنت ترغب في استخدام الرباعيات في تطبيقاتك الخاصة ، فأنا أوصي بهذه المكتبة.

تنزيل العرض التوضيحي


, . Unity 3.5.2, . zip Windows, Unity Mac.

Understanding Quaternions.zip


Quaternions for Computer Graphics

Vince, J (2011). Quaternions for Computer Graphics. 1st. ed. London: Springer.



Dunn, F. and Parberry, I. (2002). 3D Math Primer for Graphics and Game Development. 1st. ed. Plano, Texas: Wordware Publishing, Inc.

Source: https://habr.com/ru/post/ar426863/


All Articles