2D- und 3D-Vektoren
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
timmeTheOnlyBetreff: 2D- und 3D-Vektoren |
Di, Jun 19, 2012 18:00 Antworten mit Zitat |
|
---|---|---|
Hallo Leute,
ich habe mir den Spaß gemacht und Klassen für das Berechnen von Vektoren im zwei-, sowie im dreidimensionalen Raum geschrieben, die ich euch nicht vorenthalten möchte. Die Klassen beinhalten die wichtigen Operationen der analytischen Geometrie (11. Klasse) und sind - meiner Meinung nach - einfach anzuwenden. ---------- Vector2 - Vektoren im zweidimensionalen Raum BlitzMax: [AUSKLAPPEN]
Erläuterung: (Ich werde Vektoren mit kleinen, lateinischen Buchstaben ohne Pfeil bennen, weil man diesen im ASCII Alphabet vergeblich sucht...) Code: [AUSKLAPPEN] Klasse Vector2: Funktionen: Create:Vector2(x:Float,y:Float) Erstellt einen neuen Vektor mit den Komponenten x und y und gibt ihn als Vector2 zurück Add:Vector2(a:Vector2,b:Vector2) Addiert die zwei Vektoren a und bund gibt das Ergebnis als Vector2 zurück c = a + b Subtract:Vector2(a:Vector2,b:Vector2) Subtrahiert Vektor b von Vektor a und gibt das Ergebnis als Vector2 zurück c = a - b Multiply:Vector2(a:Vector2,s:Float) Multipliziert den Vektor a mit dem Skalar s und gibt das Ergebnis als Vector2 zurück c = s (Skalar) * a Divide:Vector2(a:Vector2,s:Float) Dividiert den Vektor a durch den Skalar s und gibt das Ergebnis als Vector2 zurück Wenn gilt s = 0, dann gibt die Funktion null zurück c = a / s (Skalar) DotProduct:Float(a:Vector2,b:Vector2) Berechnet das Skalar- / Punktprodukt der Vektoren a und b und gibt das Ergebnis als Float zurück s (Skalar) = a ○ b AngleBetween:Float(a:Vector2,b:Vector2) Berechnet den durch die Vektoren a und b eingeschlossenen Winkel und gibt ihn als Float zurück a ○ b φ = ------- |a|*|b| Normal:Vector2(a:Vector2,s:Byte=0) Berechnet einen der beiden Normalvektoren (s=0 oder s=1), bringt dessen Betrag auf 1 und gibt ihn als Vector2 zurück Methoden: Absolute:Float() Gibt den Betrag des Vektors der Instanz a als Float zurück s (Skalar) = |a| Draw(repX:Int, repY:Int) Zeichnet einen Repräsentanten des Vektors der Instanz a an die Stelle repX, repY, wobei der Punkt den Anfang des Repräsentanten symbolisiert ---------- Vector3 - Vektoren im dreidimensionalen Raum BlitzMax: [AUSKLAPPEN]
Erläuterung: (Ich werde Vektoren mit kleinen, lateinischen Buchstaben ohne Pfeil bennen, weil man diesen im ASCII Alphabet vergeblich sucht...) Code: [AUSKLAPPEN] Klasse Vector3: Funktionen: Create:Vector3(x:Float,y:Float,z:Float) Erstellt einen neuen Vektor mit den Komponenten x, y und z und gibt ihn als Vector3 zurück Add:Vector3(a:Vector3,b:Vector3) Addiert die zwei Vektoren a und b und gibt das Ergebnis als Vector3 zurück c = a + b Subtract:Vector3(a:Vector3,b:Vector3) Subtrahiert Vektor b von Vektor a und gibt das Ergebnis als Vector3 zurück c = a - b Multiply:Vector3(a:Vector3,s:Float) Multipliziert den Vektor a mit dem Skalar s und gibt das Ergebnis als Vector3 zurück c = s (Skalar) * a Divide:Vector3(a:Vector3,s:Float) Dividiert den Vektor a durch den Skalar s und gibt das Ergebnis als Vector3 zurück Wenn gilt s = 0, dann gibt die Funktion null zurück c = a / s (Skalar) DotProduct:Float(a:Vector3,b:Vector3) Berechnet das Skalar- / Punktprodukt der Vektoren a und b und gibt das Ergebnis als Float zurück s (Skalar) = a ○ b VectorProduct:Vector3(a:Vector3,b:Vector3) Berechnet das Kreuz- / Vektorprodukt der Vektoren a und b und gibt das Ergebnis als Vector3 zurück c = a x b AngleBetween:Float(a:Vector3,b:Vector3) Berechnet den durch die Vektoren a und b eingeschlossenen Winkel und gibt ihn als Float zurück a ○ b φ = ------- |a|*|b| Normal:Vector3(a:Vector3,b:Vector3) Berechnet den Normalvektor der Vektoren a und b in einem Rechtssystems, bringt dessen Betrag auf 1 und gibt das Ergebnis als Vector3 zurück Methoden: Absolute:Float() Gibt den Betrag des Vektors der Instanz a als Float zurück s (Skalar) = |a| Draw(repX:Int, repY:Int) Zeichnet einen Repräsentanten des Vektors der Instanz a an die Stelle repX, repY, wobei der Punkt den Anfang des Repräsentanten symbolisiert und der z-Achse unveränderlich um den Faktor sqr(2)/2 gestaucht ist ---------- Beispiel - wofür braucht man den Mist denn jetzt und wie wendet man die Klassen an? Code: [AUSKLAPPEN] Berechnung des Volumens des Spates, der durch die Vektoren a, b und c definiert ist a:Vector3 = Vector3.Create(3, 0, 0) b:Vector3 = Vector3.Create(3, 4, 0) c:Vector3 = Vector3.Create(3, 5, 6) v:Float = Vector3.DotProduct(Vector3.VectorProduct(a,b), c) ------- Mathematisch: V = (a x b) ○ c ------- Ich hoffe die Klassen helfen ein wenig... Gruß, Tim |
||
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
Powered by phpBB © 2001 - 2006, phpBB Group