سؤال

أريد أن أفعل بعض الرسم 2D وبالتالي يريدون تنفيذ بعض مصفوفة التحولات.مع ضوء الرياضيات الخلفية أنا أحاول أن أفهم كيفية القيام بذلك في C# (أي oop اللغة أن تفعل ذلك بوضوح).

كل ما قرأت هو موضحا أننا بحاجة إلى العمل مع 3x3 المصفوفات أن تكون قادرة على التعامل مع الترجمات.لأنك لا يمكن أن تجعل الترجمة مع الضرب.ولكن هذا هو مع الضرب المصفوفات أن نخلق لدينا التحولات.لذلك نحن نعمل مع شيء من هذا القبيل:

{ x1, x2, tx }
{ y1, y2, ty }
{ 0,  0,  1  }

أنا أفهم يعني من العمود الثالث ، ولكن لماذا نحتاج إلى الصف الثالث ؟ في الهوية مصفوفة وكذلك في التناوب ، مقياس أو دوران الصف الأخير هو نفسه.هل هناك عمليات لم تصل حتى الآن والتي سوف تحتاج ؟ هل لأن بعض لغات البرمجة (جافا) يؤدي بشكل أفضل مع "مربع الأبعاد" المصفوفات?إذا كان الأمر كذلك يمكنني استخدام 3 أعمدة و 2 الصفوف في C# (منذ خشنة المصفوفات يعمل بشكل جيد أو أفضل).

على سبيل المثال دوران + الترجمة لدي مصفوفة مثل هذا

{ cos(rot)*x1, (-sin(rot))*x2, tx }
{ sin(rot)*y1, cos(rot)*y2,    ty }
{ 0,           0,              1  }

لا حاجة إلى الصف الأخير.

هل كانت مفيدة؟

المحلول

هذا مع الضرب المصفوفات أن نخلق لدينا التحولات

هذا هو السبب في أننا نريد ساحة المصفوفات.

لنفترض أننا فعلنا ما يقترح ، وتستخدم 2x3 المصفوفات لدينا التحولات.

ثم التناوب

( x1, x2, 0 )
( y1, y2, 0 )

و ترجمة

( 1, 0, tx )
( 0, 1, ty )

ونحن يمكن أن تؤدي إما التناوب أو ترجمة بضرب لدينا مصفوفة من عمود ناقل تمثل نقطة:

    ( x )
M   ( y )
    ( 0 )

للحصول على الإجابات الصحيحة.

ومع ذلك - كيف نذهب عن تأليف التحولات?في الواقع ، "عن دوران + الترجمة لدي مصفوفة مثل هذا" المثال, كيف الحصول على أن المصفوفة ؟ ومن المؤكد في هذه الحالة يمكنك كتابة فقط لكن بشكل عام ؟ حسنا, أنت تعرف الإجابة:

هذا مع الضرب المصفوفات أن نخلق لدينا التحولات

لذلك يجب أن يكون من الممكن ضرب اثنين من التحول المصفوفات لإعطاء آخر مصفوفة التحويل.و قواعد الضرب مصفوفة تبين أن هذا:

( . . . ) ( . . . )
( . . . ) ( . . . ) = ???

ليست صالحة مصفوفة multiplcation.نحن بحاجة المصفوفات التي يمكن multipled في التحولات إلى composable.لذلك علينا أن صف إضافي.


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

نصائح أخرى

الجواب هو إحداثيات متجانسة.للجمع بين الدوران والترجمة في عملية واحدة، هناك حاجة إلى البعد الإضافي واحد من يتطلب النموذج.بالنسبة للأشياء المستوية، هذا هو 3 مكونات ولأشياء المكانية هذا هو 4 مكونات.يأخذ المشغلون 3 مكونات وإرجاع 3 مكونات تتطلب مصفوفات 3x3.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top