2009-08-05 6 views
1

Ich habe die Matrix-Klasse tausend Mal verwendet. Ich habe ein grundlegendes Verständnis von Matrix-Mathematik, es ist Jahre her, seit ich eine Klasse zu diesem Thema hatte. Aber ich verstehe nicht ganz, was diese Klasse unter der Haube tut, um die Punkte in einem GraphicsPath zu manipulieren.System.Drawing.Matrix, ich verstehe, was es tut, aber wie funktioniert es?

Was genau macht es da speziell für GraphicsPaths? Oder eine andere Art, es zu betrachten, wenn die Matrix-Klasse nicht existierte und ich meine eigene erschaffen musste, wie würde sie aussehen und was würde sie tun? (Ich erstelle nicht mein eigenes ich will es nur verstehen)

Des Weiteren weiß jemand die Maße der Matrix, die in der Matrix-Klasse benutzt wird?

EDIT: Ich habe es auf den folgenden Aufruf in Reflektor eingegrenzt. Von da an habe ich einen Kuss.

[DllImport("gdiplus.dll", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)] 
internal static extern int GdipTransformPath(HandleRef path, HandleRef matrix); 

Antwort

1

In diesem Fall ist die Matrix-Klasse eine 2D-Transformationsmatrix. Die Matrix wird verwendet, um den Grafikpfad zu skalieren, zu drehen und/oder zu übersetzen. Die Mathematik ist relativ geradlinig. Sie können es hier sehen: http://en.wikipedia.org/wiki/Transformation_matrix

+0

Also, was sind die Dimensionen der Matrix? Was denkst du macht es, Multiplikation? Mann, ich muss mich wieder an meine lineare Geometrie anpassen. –

+0

Während Tjohos Artikel unten wirklich interessant ist, empfehle ich jedem, der hier nach Antworten sucht, um ihn anzuschauen; Ich denke, diese Antwort hatte mehr von den Grundlagen von dem, was ich suchte. Vielen Dank. –

0

A Graphic ist, im Grunde eine Sammlung von Punkten und eine Flags, die erklären, wie die Punkte miteinander in Beziehung stehen. Die Matrixklasse wendet die Matrix einfach auf diese Punkte an.

Sie könnten das gleiche implementieren: 1. Erstellen Sie eine neue, leere Graphic 2. eine GraphicsPathIterator Verwendung, die Pfade durchlaufen (und Subpfade) 3. jeden Punkt nehmen und anwenden, um die Matrix 4. diesen Punkt hinzufügen zum neuen, GraphicsPath

Aber tun Sie es nicht. Die Typen in GraphicsPath sind nicht gut dokumentiert.

1

Eine wichtige Sache zu beachten, wenn Sie Ihre eigene Matrix-Klasse erstellen, die hin und her in die System.Drawing.Matrix Klasse konvertiert, ist, dass die .NET nicht verwendet der am häufigsten verwendete Standard beim Transformieren von Punkten.

Die .NET-Matrix scheint transponiert zu sein, bevor die Transformation stattfindet.

Lesen Sie auch den Hintergrund hier: http://www.codeproject.com/KB/recipes/psdotnetmatrix.aspx

+0

Ich glaube nicht, dass ich mein eigenes erstellen werde, ich wollte nur ein besseres Verständnis davon haben, was zum Teufel da drinnen vor sich ging, damit ich sicher sein kann, dass ich meinen Code so effizient wie möglich mache. –

+0

Oh, das ist ein wirklich cooles Projekt, das du verlinkt hast, ich freue mich darauf zu graben, um zu sehen, wie es funktioniert. –