لماذا يتم تحويل ترتيب أهمية
واحدة Matrixيمكن تخزين كائن تحويل مفرد أو تسلسل تحويلات. الثانية هو تسمى تحويل مركبة. مصفوفة تحويل مركب هو تم الحصول عليها من خلال حساب حاصل ضرب مصفوفات تحويلات الفردية.
أمثلة تحويل مركب
في تحويل مركب، وترتيب تحويلات الفردية هو الهامة. على سبيل المثال، إذا كنت أول استدارة، ثم تغيير حجم ثم الترجمة، تحصل على نتيجة مختلفة عن حالة التي أول ترجمة، ثم استدارة، ثم تغيير حجم. في GDI+، مضمنة تحويلات مركب من اليسار إلى الأيمن. إذا كانت S وا أ المقياس، دوران، والتنظيمات الترجمة على التوالي، ثم منتج SRT (الترتيب) هو مصفوفة تحويل المركبة التي المعيارية، أولاً ثم استدارة، ثم يقوم بترجمة. المصفوفة بإنتاج منتج SRT هو مختلفة من مصفوفة منتجة من قبل TRS منتج.
ترتيب السبب الوحيد هو كبير هو الانتهاء تحويلات مثل دوران وتغيير الحجم بالنسبة لنقطة البداية لنظام الإحداثيات. تغيير حجم كائن التي هو توسيط في يعطي أصل نتيجة مختلفة عن تغيير حجم كائن الذي تم نقله بعيداً عن نقطة البداية. وبشكل مماثل، استدارة كائن الذي هو توسيط في يعطي أصل نتيجة مختلفة من استدارة كائن الذي تم نقله بعيداً عن نقطة البداية.
المثال التالي يدمج التحجيم، التدوير و الترجمة (الترتيب) إلى النموذج تحويل مركبة. وسيطة Appendالتي تم تمريرها إلى RotateTransformأسلوب يشير إلى أنه ستتبع دوران مقياس. كذلك، وسيطة Appendالتي تم تمريرها إلى TranslateTransformأسلوب يشير إلى أن الترجمة ستتبع دوران. AppendوPrependالأعضاءMatrixOrderالتعداد.
Dim rect As New Rectangle(0, 0, 50, 50)
Dim pen As New Pen(Color.FromArgb(128, 200, 0, 200), 2)
e.Graphics.ResetTransform()
e.Graphics.ScaleTransform(1.75F, 0.5F)
e.Graphics.RotateTransform(28, MatrixOrder.Append)
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Append)
e.Graphics.DrawRectangle(pen, rect)
Rectangle rect = new Rectangle(0, 0, 50, 50);
Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
e.Graphics.ResetTransform();
e.Graphics.ScaleTransform(1.75f, 0.5f);
e.Graphics.RotateTransform(28, MatrixOrder.Append);
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Append);
e.Graphics.DrawRectangle(pen, rect);
يقوم المثال التالي لاستدعاءات الأسلوب نفسه كما في المثال السابق، ولكن يتم عكس ترتيب المكالمات الخاصة. ترتيب العمليات الناتج هو ترجمة أولاً، ثم استدارة، ثم مقياس ينتج نتائج مختلفة جداً من المقياس أول، ثم استدارة، ثم ترجمة.
Dim rect As New Rectangle(0, 0, 50, 50)
Dim pen As New Pen(Color.FromArgb(128, 200, 0, 200), 2)
e.Graphics.ResetTransform()
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Append)
e.Graphics.RotateTransform(28, MatrixOrder.Append)
e.Graphics.ScaleTransform(1.75F, 0.5F)
e.Graphics.DrawRectangle(pen, rect)
Rectangle rect = new Rectangle(0, 0, 50, 50);
Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Append);
e.Graphics.RotateTransform(28, MatrixOrder.Append);
e.Graphics.ScaleTransform(1.75f, 0.5f);
e.Graphics.DrawRectangle(pen, rect);
اتجاه واحد عكسى ترتيب تحويلات الفردية في تحويل مركب هو عكسى ترتيب تسلسل استدعاء الأسلوب. طريقة ثانية للتحكم في ترتيب العمليات هو لتغيير وسيطة ترتيب المصفوفة. المثال التالي هو نفسه كـ المثال السابق، ما عدا ذلك Appendh كـ تم تم تغييرهه إلى Prepend. الضرب المصفوفة هو القيام بالترتيب SRT، بالموقع تكون ح ق وا التنظيمات لمقياس، استدارة والترجمة، على التوالي. ترتيب تحويل مركب هو المقياس أول، ثم استدارة، ثم ترجمة.
Dim rect As New Rectangle(0, 0, 50, 50)
Dim pen As New Pen(Color.FromArgb(128, 200, 0, 200), 2)
e.Graphics.ResetTransform()
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Prepend)
e.Graphics.RotateTransform(28, MatrixOrder.Prepend)
e.Graphics.ScaleTransform(1.75F, 0.5F)
e.Graphics.DrawRectangle(pen, rect)
Rectangle rect = new Rectangle(0, 0, 50, 50);
Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(150, 150, MatrixOrder.Prepend);
e.Graphics.RotateTransform(28, MatrixOrder.Prepend);
e.Graphics.ScaleTransform(1.75f, 0.5f);
e.Graphics.DrawRectangle(pen, rect);
ناتج المثال السابق على الفور هو نفس كـ نتيجة المثال أول في هذا الموضوع. Th هو هو لأن نقوم بعكس الترتيب لاستدعاءات الأسلوب وترتيب الضرب المصفوفة سواء.