Ich deklariere das hier mal gleich als Experiment, bevor jemand über den Nutzen zu motzen anfängt. Da ich da aber ein gewisses Potential sehe, will ich euch dieses Fundstück aus meinem Archiv nicht vorenthalten.
Also, es ging mir darum, per GML etwas zu gestalten, dass so nah wie möglich an die Klassen heran kommt, die man aus OOP anderer Sprachen kennt.
Heraus gekommen ist eine "Klasse" die das rechnen mit Vektoren erleichtern soll und zudem sehr leicht zu erweitern ist.
Folgendes Beispiel zeigt was ich meineErstellt ein 2D Vektorobjekt. Es sind bis zu 16 Dimensionen möglich ( da nur 16 Argumente ).
Wer jetzt was damit anfangen will, kann zB. folgendes machen"bar" ist damit jetzt 512. Man kann also foo.a, foo.b, foo.c usw. nutzen. Wer eher auf Arrays steht, oder einfach gerne durch die Werte iteriert, kann foo.value[n]; nutzen. Für eine Iteration ist sicherlich auch foo.count relevant, welches die Anzahl der Dimensionen wieder gibt.
Damit das ganze nicht so nutzlos ist, wie es jetzt erscheint, habe ich noch ein paar Funktionen hinzu gefügt:
vector_angle( vec1, vec2 ); Man nehme 2 2Dimensionale Vektoren und bekommt den Winkel zwischen diesen zurück
vector_dotproduct( vec1, vec2 ); 2 2Dimensionale oder 3Dimensionale Vektoren sind für dieses Rechenstück notwendig
vector_length( vec ); Die Länge eines Vektor mit beliebig vielen Dimensionen lässt sich mit dieser Funktion bestimmen
Wer sich mal die Funktionen ansieht, wird bemerken, dass diese erschreckend einfach sind, und leicht zu erweitern sind. Ich freue mich schon auf die ersten Funktionen fürs Skalarprodukt oÄ.
Das unten verlinkte Bespiel enthält nicht nur die für den Export fertigen Scripte, sondern auch ein kleines Beispiel mit ein paar Rechnungen.
Und ein Wort zur Performance will ich noch verlieren: Da jeder Vektor eine eigene Instanz ist, sollte man aufpassen, nicht zu viele gleichzeitig zu haben. Man kann Vektoren wieder mit vector_destroy() entfernen.
Für GM8.1
und für nicht gm8.1ler
Die GML Scripte für andere (vector_dotproduct() nur mit Modifikationen nutzbar)
MfG SDX
Also, es ging mir darum, per GML etwas zu gestalten, dass so nah wie möglich an die Klassen heran kommt, die man aus OOP anderer Sprachen kennt.
Heraus gekommen ist eine "Klasse" die das rechnen mit Vektoren erleichtern soll und zudem sehr leicht zu erweitern ist.
Folgendes Beispiel zeigt was ich meineErstellt ein 2D Vektorobjekt. Es sind bis zu 16 Dimensionen möglich ( da nur 16 Argumente ).
Wer jetzt was damit anfangen will, kann zB. folgendes machen"bar" ist damit jetzt 512. Man kann also foo.a, foo.b, foo.c usw. nutzen. Wer eher auf Arrays steht, oder einfach gerne durch die Werte iteriert, kann foo.value[n]; nutzen. Für eine Iteration ist sicherlich auch foo.count relevant, welches die Anzahl der Dimensionen wieder gibt.
Damit das ganze nicht so nutzlos ist, wie es jetzt erscheint, habe ich noch ein paar Funktionen hinzu gefügt:
vector_angle( vec1, vec2 ); Man nehme 2 2Dimensionale Vektoren und bekommt den Winkel zwischen diesen zurück
vector_dotproduct( vec1, vec2 ); 2 2Dimensionale oder 3Dimensionale Vektoren sind für dieses Rechenstück notwendig
vector_length( vec ); Die Länge eines Vektor mit beliebig vielen Dimensionen lässt sich mit dieser Funktion bestimmen
Wer sich mal die Funktionen ansieht, wird bemerken, dass diese erschreckend einfach sind, und leicht zu erweitern sind. Ich freue mich schon auf die ersten Funktionen fürs Skalarprodukt oÄ.
Das unten verlinkte Bespiel enthält nicht nur die für den Export fertigen Scripte, sondern auch ein kleines Beispiel mit ein paar Rechnungen.
Und ein Wort zur Performance will ich noch verlieren: Da jeder Vektor eine eigene Instanz ist, sollte man aufpassen, nicht zu viele gleichzeitig zu haben. Man kann Vektoren wieder mit vector_destroy() entfernen.
Für GM8.1
und für nicht gm8.1ler
Die GML Scripte für andere (vector_dotproduct() nur mit Modifikationen nutzbar)
MfG SDX