Matrix Tutorial C#
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
all
anfang
array
byte
code
dimension
double
endeffekt
forum
frage
http
image
lernen
matrix
matrizen
operator
paar
programmieren
url
wald
-
Hallo!
Kennt jemand ein deutsches Tutorial übers Programmieren einer Matrix in C#? Leider hat Google nichts dazu finden können...
Danke im Voraus! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Äh... Ich würd mal sagen, dass du eigentlich nur das brauchst: http://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.matrix.aspx
Hat eigentlich alle notwendigen Funktionen.
Für das Mathematische musst du halt auf Wikipedia schaun, aber sonst sehe ich keine Probleme.
Lg
mator -
mator-kaleen schrieb:
Äh... Ich würd mal sagen, dass du eigentlich nur das brauchst: http://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.matrix.aspx
Hat eigentlich alle notwendigen Funktionen.
Für das Mathematische musst du halt auf Wikipedia schaun, aber sonst sehe ich keine Probleme.
Lg
mator
Das ist zwar schon mal nicht schlecht, vielen Dank, aber es ist nicht das was ich suche. Es muss doch irgendwo ein auf C# bezogenes Tutorial geben wo diesbezüglich alles ganz genau von Anfang an erklärt wird... -
bladehunter schrieb:
Was verstehst du unter einer "Matrix"? Ein 2-dimensionales Array oder etwas graphisches, so wie mator-katleen es angeführt hat? Der Begriff kann schließlich mehrere Bedeutungen haben. Wenn du eine zweite Realität programmieren willst, dann wird das sicherlich nicht einfach werden
Im Endeffekt all dies. Angefangen bei einem 2 dimensionalen Array über mehrdimensionale Arrays bis hin zu etwas graphischem. -
Hallo yorecords,
ohne konkreten Verwendungszweck gestaltet es sich etwas schwierig etwas passendes zu finden.
Ich habe aber mal eine rudimentäre Klasse zusammengestellt, die als Ausgangspunkt für die meisten üblichen Anwendungsfälle dienlich sein sollte:
class Matrix { private double[,] values; public int Rows { get { return values.GetLength(0); } } public int Columns { get { return values.GetLength(1); } } public double this[int row, int col] { get { return values[row, col]; } set { values[row, col] = value; } } public Matrix(long size) { values = new double[size, size]; } public Matrix(long rows, long cols) { values = new double[rows, cols]; } public Matrix(Matrix mat) { values = new double[mat.Rows, mat.Columns]; for (int r = 0; r < mat.Rows; r++) for (int c = 0; c < mat.Columns; c++) values[r, c] = mat.values[r, c]; } public static Matrix Identity(long rows, long cols) { Matrix result = new Matrix(rows, cols); if (rows < cols) { for (int i = 0; i < rows; i++) result.values[i, i] = 1.0; } else { for (int i = 0; i < cols; i++) result.values[i, i] = 1.0; } return result; } public Matrix Transpose() { Matrix result = new Matrix(this.Columns, this.Rows); for (int r = 0; r < this.Rows; r++) for (int c = 0; c < this.Columns; c++) result.values[c, r] = values[r, c]; return result; } public static Matrix operator +(Matrix mat1, Matrix mat2) { if (mat1.Rows != mat2.Rows || mat1.Columns != mat2.Columns) throw new Exception("Matrix dimension mismatch."); Matrix result = new Matrix(mat1); for (int r = 0; r < mat2.Rows; r++) for (int c = 0; c < mat2.Columns; c++) result.values[r, c] += mat2.values[r, c]; return result; } public static Matrix operator -(Matrix mat) { Matrix result = new Matrix(mat.Rows, mat.Columns); for (int r = 0; r < mat.Rows; r++) for (int c = 0; c < mat.Columns; c++) result.values[r, c] = -mat.values[r, c]; return result; } public static Matrix operator -(Matrix mat1, Matrix mat2) { if (mat1.Rows != mat2.Rows || mat1.Columns != mat2.Columns) throw new Exception("Matrix dimension mismatch."); Matrix result = new Matrix(mat1); for (int r = 0; r < mat2.Rows; r++) for (int c = 0; c < mat2.Columns; c++) result.values[r, c] -= mat2.values[r, c]; return result; } public static Matrix operator *(Matrix mat1, Matrix mat2) { if (mat1.Columns != mat2.Rows) throw new Exception("Invalid matrix dimensions."); Matrix result = new Matrix(mat1.Rows, mat2.Columns); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) for ( int i = 0; i < mat1.Columns; i++) result.values[r, c] += mat1.values[r, i]*mat2.values[i,c]; return result; } public static Matrix operator *(Matrix mat, double d) { Matrix result = new Matrix(mat); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) result.values[r, c] *= d; return result; } public static Matrix operator *(double d, Matrix mat) { Matrix result = new Matrix(mat); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) result.values[r, c] *= d; return result; } }
Sie stellt aber wirklich nur ein absolutes Minimum dar. Wie Du die Sache erweitern musst bzw. willst hängt davon ab, was Du machen willst.
Im Allgemeinen benötigt man Matrizen für viele Verfahren der Linearen Algebra.
Wenn Du es erst einmal etwas konkreter/einfacher willst, dann kannst Du Dich auch erstmal mit analytischer Geometrie beschäftigen. Projektive Geometrie (insb. homogene Koordinaten) ist evtl. auch ganz interessant z.B. im zusammenhang mit 3D-Rendering oder ein paar netten Bildverzerrungen -
yorecords schrieb:
um zu entscheiden dazu was @bladehunter schrieb, kuck mal das bitte an. wenn das dem entspricht, was du dir vorstellst, dann ist es eh in ordnung. wenn nicht, ... dann ist es ein rätzel, was du unter matrix verstehst.
... Im Endeffekt all dies. Angefangen bei einem 2 dimensionalen Array über mehrdimensionale Arrays bis hin zu etwas graphischem. -
darkpandemic schrieb:
Hallo yorecords,
ohne konkreten Verwendungszweck gestaltet es sich etwas schwierig etwas passendes zu finden.
Ich habe aber mal eine rudimentäre Klasse zusammengestellt, die als Ausgangspunkt für die meisten üblichen Anwendungsfälle dienlich sein sollte:
class Matrix { private double[,] values; public int Rows { get { return values.GetLength(0); } } public int Columns { get { return values.GetLength(1); } } public double this[int row, int col] { get { return values[row, col]; } set { values[row, col] = value; } } public Matrix(long size) { values = new double[size, size]; } public Matrix(long rows, long cols) { values = new double[rows, cols]; } public Matrix(Matrix mat) { values = new double[mat.Rows, mat.Columns]; for (int r = 0; r < mat.Rows; r++) for (int c = 0; c < mat.Columns; c++) values[r, c] = mat.values[r, c]; } public static Matrix Identity(long rows, long cols) { Matrix result = new Matrix(rows, cols); if (rows < cols) { for (int i = 0; i < rows; i++) result.values[i, i] = 1.0; } else { for (int i = 0; i < cols; i++) result.values[i, i] = 1.0; } return result; } public Matrix Transpose() { Matrix result = new Matrix(this.Columns, this.Rows); for (int r = 0; r < this.Rows; r++) for (int c = 0; c < this.Columns; c++) result.values[c, r] = values[r, c]; return result; } public static Matrix operator +(Matrix mat1, Matrix mat2) { if (mat1.Rows != mat2.Rows || mat1.Columns != mat2.Columns) throw new Exception("Matrix dimension mismatch."); Matrix result = new Matrix(mat1); for (int r = 0; r < mat2.Rows; r++) for (int c = 0; c < mat2.Columns; c++) result.values[r, c] += mat2.values[r, c]; return result; } public static Matrix operator -(Matrix mat) { Matrix result = new Matrix(mat.Rows, mat.Columns); for (int r = 0; r < mat.Rows; r++) for (int c = 0; c < mat.Columns; c++) result.values[r, c] = -mat.values[r, c]; return result; } public static Matrix operator -(Matrix mat1, Matrix mat2) { if (mat1.Rows != mat2.Rows || mat1.Columns != mat2.Columns) throw new Exception("Matrix dimension mismatch."); Matrix result = new Matrix(mat1); for (int r = 0; r < mat2.Rows; r++) for (int c = 0; c < mat2.Columns; c++) result.values[r, c] -= mat2.values[r, c]; return result; } public static Matrix operator *(Matrix mat1, Matrix mat2) { if (mat1.Columns != mat2.Rows) throw new Exception("Invalid matrix dimensions."); Matrix result = new Matrix(mat1.Rows, mat2.Columns); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) for ( int i = 0; i < mat1.Columns; i++) result.values[r, c] += mat1.values[r, i]*mat2.values[i,c]; return result; } public static Matrix operator *(Matrix mat, double d) { Matrix result = new Matrix(mat); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) result.values[r, c] *= d; return result; } public static Matrix operator *(double d, Matrix mat) { Matrix result = new Matrix(mat); for (int r = 0; r < result.Rows; r++) for (int c = 0; c < result.Columns; c++) result.values[r, c] *= d; return result; } }
Sie stellt aber wirklich nur ein absolutes Minimum dar. Wie Du die Sache erweitern musst bzw. willst hängt davon ab, was Du machen willst.
Im Allgemeinen benötigt man Matrizen für viele Verfahren der Linearen Algebra.
Wenn Du es erst einmal etwas konkreter/einfacher willst, dann kannst Du Dich auch erstmal mit analytischer Geometrie beschäftigen. Projektive Geometrie (insb. homogene Koordinaten) ist evtl. auch ganz interessant z.B. im zusammenhang mit 3D-Rendering oder ein paar netten Bildverzerrungen
Danke für deine Antwort! Leider hilft mir das so aber nicht viel weiter.. Ich suche ein auf C# bezogenes Tutorial dazu indem das alles von Anfang an erklärt wird. Also eben im Bezug auf C#. Welche Verwendungszwecke es alles gibt und wie es angewendet wird usw. Also halt komplett von Anfang an (und imBezug auf C#). Ich habe einmal in einem C Tutorial einen kurzen Abschnitt dazu gesehen. War aber nicht sehr umfassend und nur C-bezogen...
czibere schrieb:
yorecords schrieb:
um zu entscheiden dazu was @bladehunter schrieb, kuck mal das bitte an. wenn das dem entspricht, was du dir vorstellst, dann ist es eh in ordnung. wenn nicht, ... dann ist es ein rätzel, was du unter matrix verstehst.
... Im Endeffekt all dies. Angefangen bei einem 2 dimensionalen Array über mehrdimensionale Arrays bis hin zu etwas graphischem.
Ich weiß schon was das ist, sonst würde ich wohl nicht danach fragen. Wie bereits erwähnt geht es mir um ein C#-bezogenes Totorial dazu. Einmal alles grundlegende zu mehrdimensionalen Arrays bis hin zu höheren Beispielen usw... -
yorecords schrieb:
yo mey. also ich frage immer danach, wenn ich davon eben keine ahnung habe ;) nun ja, wie auch immer.
... Ich weiß schon was das ist, sonst würde ich wohl nicht danach fragen ...
weil du dich so meisterhaft über weitere infos von verwendung deinerseits fertigschweigst, mein letzter versuch, dir zu helfen ist das hier. von dort musst du dann deinen weg selber finden.
und dann noch paar links (o. rechts die man so findet):
http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx
http://msdn.microsoft.com/de-de/library/2yd9wwz4(v=vs.80).aspx
http://www.aspheute.com/artikel/20000731.htm
http://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv -
czibere schrieb:
yorecords schrieb:
yo mey. also ich frage immer danach, wenn ich davon eben keine ahnung habe ;) nun ja, wie auch immer.
... Ich weiß schon was das ist, sonst würde ich wohl nicht danach fragen ...
weil du dich so meisterhaft über weitere infos von verwendung deinerseits fertigschweigst, mein letzter versuch, dir zu helfen ist das hier. von dort musst du dann deinen weg selber finden.
und dann noch paar links (o. rechts die man so findet):
http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx
http://msdn.microsoft.com/de-de/library/2yd9wwz4(v=vs.80).aspx
http://www.aspheute.com/artikel/20000731.htm
http://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv
Das ist schon einmal super, danke!
Ja ich hab derzeit noch keinen wirklichen Verwendungszweck. Ich will es nur mal lernen.
Z.B. hab ich gehört, dass alle brauchbaren Verschlüsselungen auf diese Weise programmiert werden, was ich mir zurzeit nicht im geringsten vorstellen kann... -
yorecords schrieb:
bitte
czibere schrieb:
... Das ist schon einmal super, danke!
... Ich will es nur mal lernen.
yo mey! lernen tut man nicht in foren! in foren stellt man fragen (wodurch man dann lernt)! und wenn man lernprobleme hat, dann geht man zu anderen instanzen ;)
Z.B. hab ich gehört, dass alle brauchbaren Verschlüsselungen auf diese Weise programmiert werden, was ich mir zurzeit nicht im geringsten vorstellen kann...
yo mey! man hört aus dem IT-wald recht viel heraus. unter umständen sogar 'kuck-kuck' [das ist dann der grüner anteil des IT-waldes] - der rest ist 'silicon w...' ;) -
czibere schrieb:
yo mey! lernen tut man nicht in foren! in foren stellt man fragen (wodurch man dann lernt)! und wenn man lernprobleme hat, dann geht man zu anderen instanzen ;)
Ich habe ja auch nicht verlangt, dass mir das jetzt jemand beibringt, sondern lediglich nach Tutorials gefragt weil ich selbst dazu nichts finden konnte. Wieso sollte ich das nicht in einem Forum machen? Und wo sonst?
czibere schrieb:
yo mey! man hört aus dem IT-wald recht viel heraus. unter umständen sogar 'kuck-kuck' [das ist dann der grüner anteil des IT-waldes] - der rest ist 'silicon w...' ;)
Das mag schon sein. Aber ich hab mich mittlerweile mehr damit beschäftigt und es stimmt. Wenn man Texte mit Matrizen verschlüsselt ist es eigentlich unmöglich die Verschlüsselung zu knacken (zumindest wenn die Matrix groß genug ist, sonst trotzdem sehr sehr schwer), da Buchstaben nicht immer durch das Selbe ersetzt werden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage