2D- und 3D-Vektoren

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

timmeTheOnly

Betreff: 2D- und 3D-Vektoren

BeitragDo, Jun 21, 2012 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe meine Vektorklassen aus dem Codearchiv nun zu zwei Modulen zusammengerafft und ein Bisschen erweitert.

Die Funktionen und Methoden sind mit "bbdoc: "-Tags ausgestattet und ermöglichen somit - hoffentlich - ein schnelles einarbeiten.

Kleiner Changelog:

28.08.12
Code: [AUSKLAPPEN]

- Added: Normalized


16.08.12
Code: [AUSKLAPPEN]

Vector2 & Vector3:

- Changed: Absolute -> Magnitude
- Added: Normalize

Vector3:

- Changed: Absolute -> Magnitude
- Added: Normalize
- Fixed: Add, Subtract, Multiply, Divide


??.??.??
Code: [AUSKLAPPEN]

Vector2 & Vector3:

- Changed: Add -> Addition, Subtract -> Subtraction, Multiply -> Multiplication, Divide -> Division
- Added: Methods Add, Subtract, Multiply, Divide, Invert
- Added: Simple vectors (VectorLeft/-Right/-Up/-Down) as variables

Vector3:

- Added: Simple vectors (VectorIn/-Out) as variables
- Added: Variables OffXfZ & OffYfZ -> Manipulate the drawing of the z-axis


Die Module (mit Code) gibt es hier

Code: [AUSKLAPPEN]

Installation: Einfach den Ordner 'satyrias.mod' in das Verzeichnis '.../BlitzMax/mod/' entpacken
  • Zuletzt bearbeitet von timmeTheOnly am Di, Aug 28, 2012 21:02, insgesamt 6-mal bearbeitet
 

PhillipK

BeitragDo, Aug 16, 2012 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho Smile

Da ich grade ein paar Vektorberechnungen brauche, um "schneller" vorran zu kommen, hab ich mir dein Modul geklaubt. hihi Smile

Ganz vorweg: ich brauchte ein "Vector3.normalize" - also:
BlitzMax: [AUSKLAPPEN]

Local _vec3:Vector3 = Vector3.Create(0, -1, -1)
_vec3.Divide(_vec3.Absolute())


Dies gibt mir aber einen falschen Z wert.

Ein blick in das modul ergab:

BlitzMax: [AUSKLAPPEN]
	Method Divide(s:Float)
Local tmp:Vector3

If s <> 0
tmp = Vector3.Division(Self, s)
Self.x = tmp.x
Self.y = tmp.y
End If
End Method


Vector3.Division beachtet zwar die Z division, allerdings wird in keiner der methoden (add, subtract, divide, multiply) Self.z von tmp übernommen.

Ich werde es nun für mich fixen, aber da ich immernochnicht ganz auf dem höchsten stand bin, was vektoren angeht, solltest du das modul besser noch einmal überarbeiten Smile Ich werde mich hüten, hier fixes zu posten, da ich nicht weiß ob ich richtig liege.
 

timmeTheOnly

BeitragDo, Aug 16, 2012 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey PhillipK,

danke für dein Feedback. War schon etwas später, als ich das Zeug fertig gemacht hab.
Der Fehler mit der z-Koordinate kam daher, dass ich die Methoden von Vector2 nach Vector3 übernommen und die dritte Koordinate außer Acht gelassen habe. Schön blöd Embarassed

Desweiteren hatte ich Kopf, dass es eine Methode gibt, die den Vektor normalisiert. Das war nicht der Fall, darum habe ich sie nachgerüstet. Sie hört auf den Namen "Normalize()"

Bei der Gelegenheit ist mir aufgefallen, dass "Absolute" nicht der Ausdruck für den Betrag eines Vektors ist, sondern "Magnitude". Auch das habe ich angepasst

Gruß,
Tim
 

PhillipK

BeitragDo, Aug 16, 2012 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist kein ding Smile

Mich wunderts allerdings, das dies noch niemanden früher aufgefallen ist oO
Naja wahrscheinlich haben die meisten hier mehr ahnung von vektoren als ich :>

Ja, das absolut hat mich auch verwirrt. Beim privaten lernen von vektoren kam mir immer der begriff "length" bzw "länge" unter, oder eben Magnitude.

Ansonsten großes lob Smile Ich arbeite seit geraumer zeit schon nurnoch mit vektoren, da es einfach einfacher ist. Schon alleine die fähigkeit, 2 bis 3 werte zu "bündeln" :> Aber selbst ein modul darüber anzulegen habe ich mich nicht getraut (gefährliches halbwissen, oh-ho!)

Also danke einmal Very Happy
 

timmeTheOnly

BeitragDo, Aug 16, 2012 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt, das ganze beruht auf meinen 11. Klass Kenntnissen. Es gibt sicher noch einige Dinge, die ich nicht über Vektoren weiß, allerdings ist die analytische Geometrie keine Hexerei. Das Ganze hat mir schon des öfteren geholfen.
Für OpenGL Coding ist das ganze recht praktisch. Man kann die Klasse "missbrauchen" um Vertices, Faces oder Farben zu verwalten. Das hat zwar dann nichts mehr mit Vektoren zu tun, ist aber trotzdem noch praktisch.
Außerdem lässt sich mit dem Kreuzprodukt ganz leicht die Normale einer Dreiecksfläche berechnen. Ganz praktisch, wenn es dann um Beleuchtung geht.

juse4pro

BeitragDi, Aug 28, 2012 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

wollte dir sagen, dass dein Modul recht praktisch sein kann, wenn man nix überladenes in sein Programm importen will. Klein und schlank.

Kleine Frage: Die Methode 'Normalize' liefert laut BB-Doc einen normierten Vektor. Wenn ich mir die Methode angucke, sehe ich aber, dass dort der Ursprungsvektor lediglich verändert wird und kein neues Objekt zurückgeliefert wird. Was von beidem wolltest du nun? Very Happy (im Vector2-Modul)
 

timmeTheOnly

BeitragDi, Aug 28, 2012 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo juse4pro,

danke für das Lob und auch für die Anregung.

Die Methode 'Normalize' normalisiert nun den Vektor, wohingegen die Methode 'Normalized' den normalisierten Vektor als neues Objekt zurückgibt.

Download wieder im ersten Link.

Gruß,
Tim

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group