Also erst mal danke für eure schnellen Antworten
... Und dann auch gleich schon mal sorry, eigentlich stand da noch mehr und den Code hat's leider auch wieder durcheinander gehauen... Kommt davon, wenn man mit mehreren Tabs gleichzeitig arbeitet
. Ich arbeite jetzt mal schnelles nochmal so ab, was hier nicht steht
:
@BlueCobold: Ich hatte mir das halt mit static so wie einen Art "Operator" vorgestellt... Oder wie wenn ich von einer Zahl z.B. den Cosinus berechnen lassen will. Dann benutze ich ja auch die statische Methode der Math-Klasse und rufe nicht irgendwie eine Kosinus-Methode auf die Zahl auf. Vielleicht ist es so zumindest' besser zu verstehen, warum ich die Möglichkeit überhaupt in Erwägung gezogen habe. Kann natürlich sein, dass sie trotzdem totaler Unfug ist
...
@Architekt: Ich hatte mir halt gedacht, dass man die transponierte Matrix quasi als Eigenschaft einer jeden Matrix verstehen könnte. Der get-Zweig liefert diese dann zurück. Wobei ich mir halt nicht schlüssig bin (wie @H5:: ), ob die transponierte Matrix eine Eigenschaft einer anderen Matrix sein kann
?
@BlueCobold: Wobei ich halt die Eigenschaftsmethoden für Eigenschaften benutze und ich bin mir wie schon gesagt echt nicht sicher, ob die transponierte Matrix eine Eigenschaft einer Matrix ist. Eigenschaft wäre für mich jetzt mehr so Zeilen- und Spaltenzahl oder auch die Anzahl der Elemente.
@H5:: : Jop, so hatte ich's mir halt auch gedacht, quasi wie als Operation auf eine Matrix. Wie halt auch den Kosinus auf eine Zahl. Inwiefern meinst du das mit der generischen Funktion? Also in C# gibt's auch "Templates" aber da heißen sie "Generics" . Wobei die Funktion muss ja nur mit Matrizen arbeiten können, oder? Ich kenne keine anderen Objekte, die transponiert werden könnten. Bei mir spielt sich alles was mit Matrizen zu tun hat, in einem Namensbereich Math ab. Allerdings muss bei C# jede Funktion in einer Klasse gekapselt sein. Ich hätte die Transpose-Funktion als quasi Operation auf eine Matrix dann halt als static Methode in der Matrix Klasse definiert... Der Aufruf würde dann lauten:
|
C#-Quelltext
|
1
2
3
4
5
6
7
|
...
public void IrgendEineFunktion()
{
var mat1 = new Math.Matrix(3,5);
var mat2 = Math.Matrix.GetTransposedMatrix(mat1);
}
...
|
@TrommlBomml: Ja, erst mal das und dann halt, wie jetzt schon öfters gesagt, m.M.n ein Objekt keine Eigenschaft eines Objekts vom selben Typen sein kann... Aber ich lasse mich gerne auch vom Gegenteil überzeugen
.
@DeKugelschieber: Beides hab' ich mir auch schon überlegt aber bevor ich das mache, will ich mir erst mal sichere sein, was ihr meint, was so das sauberste wäre
.
@Legend: Aber halt auch am wenigsten "modular" ... Wenn ich z.B. eine Matrix transponieren will, ohne dabei die ursprüngliche zu verlieren, müsste ich sie erst kopieren und dann auf eine der beiden die "Transpose"-Methode aufrufen. Mit einer Matrix als Rückgabewert, könnte man entweder gleich die originale Matrix transponieren, aber auch bei bedarf eine neue direkt über den Rückgabewert "erstellen" . Übersichtlich ja, aber ob das so 100% im Sinne des Erfinders ist... Bin mir echt unschlüssig :/ . Ich verweise nochmal auf meine Überlegung, quasi als "Operator" ... Die werden ja auch als static definiert. Die Methode wäre dann quasi eine Art unärer Operator
.
Aber mal anders gefragt: Ihr habt ein Matrix Objekt. Ihr wollt es transponieren. Was würdet ihr euch von einer Methode die das liefert erwarten? Dass sie ein neues Matrix-Objekt zurück liefert. Die alte Matrix überschreibt? Gar nicht direkt auf ein Matrix-Objekt aufgerufen wird (so wie z.B. der Kosinus auf einen double Wert) und dann ein neues Matrix-Objekt zurück liefert? Und dann vllt. nochmal warum
.
So, hier jetzt noch nachträglich: Vielen Dank schon mal für eure Antworten!
Benni
P.S.: Würdet ihr die Matrix-Klasse im Namensbereich Math, Math.Matrix oder Math.Matrices definieren?
Ich habe nämlich, wenn die allg. Matrix-Klasse fertig ist, vor, einzelne Matrix-Klassen zu erstellen, die dann nur quadratisch sind und auch festgelegte Größen haben (z.B. 4x4 oder 3x3 Matrizen)... ? Weil dann wäre der Aufruf dann zwar etwas umständlicher
|
C#-Quelltext
|
1
2
3
4
|
...
var mat1 = new Math.Matrix.Matrix(3,3);
var mat2 = new Math.Matrix.Matrix3(); // Erstellt eine 3x3 Matrix
...
|
oder
|
C#-Quelltext
|
1
2
3
4
|
...
var mat1 = new Math.Matrices.Matrix(3,3);
var mat2 = new Math.Matrices.Matrix4(); // Erstellt eine 4x4 Matrix
...
|
anstatt
|
C#-Quelltext
|
1
|
|
aber halt auch übersichtlicher... Ob Math.Matrix oder Math.Matrices ist eig. auch nur ästhetik, aber irgenwie erscheint mir der Aufruf Math.Matrix.Matrix seltsam
...
P.P.S.: Soll ich die speziellen Matrizen dann von der Matrix-Klasse erben lassen und nur den Standard-Konstruktor passend anpassen oder ganz neu definieren, mit dann z.B. 9 oder 16 (double) Variablen (wie im Buch 3D-Spieleprogrammierung mit DirectX und C++ ) ? Nur so aus Interesse, wie ihr das machen würdet. Weil 'ne 3x3 Matrix ist ja nur ein speziellere, variable Matrix, also genau passend für Vererbung. Aber manche wünschen sich dann vllt. auch 9, 16, ... Variablen die sie direkt verändern können. Zu was würdet ihr tendieren. Oder würdet ihr sogar eine abstrakte Basisklasse für die Matrizen erstellen (mit z.B. nur der Zeilen, Spalten und Elementzahl) und dann darauf aufbauen. Sorry, das ich abschweife, aber das ist mir gerade noch eingefallen
.