# Wie erstelle ich Vektoren?



## Jack159 (6. Okt 2012)

Hallo,

Hier geht es nicht um Vector (dynamisches Array), sondern um mathematische Vektoren ("Pfeile").
Mir ist noch absolut unklar, wie man solche Vektoren denn in Java erstellt und mit ihnen rechnet.

Wie definiert man z.B. einen simplen 2d-Vektor x=(2,3) in Java? Und vorallem: Wie kann man damit rechnen? (Addition, Winkel usw).

Hintergrund: Ich habe vor das Spiel "Pong" zu programmieren. Dazu werde ich wohl mit Vektoren arbeiten müssen.


----------



## eRaaaa (6. Okt 2012)

Schreibe dir eine eigene (mathematische)Vector-Klasse ? Oder benutze irgendwelchen Mathe-Packages wie z.B. Vector (JScience v4.3 API) (kenne ich selbst nicht, war aber < 1 Min gefunden bei google )
Oder auch Tutorials wie Vector Addition: Math for Java Game Programmers - Developer.com


----------



## Jack159 (6. Okt 2012)

eRaaaa hat gesagt.:


> Schreibe dir eine eigene (mathematische)Vector-Klasse ? O



Ist das schwer/aufwändig? Habe soetwas in der Art noch nie gemacht.
Eigentlich müsste ich ja nur 1 Klasse "Vektor" erstellen (brauche nur 2d Vektoren), dann eben die Komponenten x und y als Variablen erstellen und dann eben noch die ganzen entsprechenden Methoden (Addition, Subtraktion, Skalarm.,...) erstellen oder?
Ein Objekt dieser Klasse wäre dann praktisch 1 Vektor mit den Objektvariablen x und y (Komponenten des Vektors).

Wenn das so einfach sein sollte, würd ich das lieber direkt selber machen. Dann lerne ich auch entsprechend mehr dabei


----------



## eRaaaa (6. Okt 2012)

Jack159 hat gesagt.:


> Ist das schwer/aufwändig? Habe soetwas in der Art noch nie gemacht.
> Eigentlich müsste ich ja nur 1 Klasse "Vektor" erstellen (brauche nur 2d Vektoren), dann eben die Komponenten x und y als Variablen erstellen und dann eben noch die ganzen entsprechenden Methoden (Addition, Subtraktion, Skalarm.,...) erstellen oder?
> Ein Objekt dieser Klasse wäre dann praktisch 1 Vektor mit den Objektvariablen x und y (Komponenten des Vektors).
> 
> Wenn das so einfach sein sollte, würd ich das lieber direkt selber machen. Dann lerne ich auch entsprechend mehr dabei



So macht man das i.d.R. ja :toll:


----------



## Marco13 (7. Okt 2012)

Der JScience-Vector ist vermutlich nicht das, was du willst (das ist zwar einer dieser "mathematischen" Vektoren, aber auf einem Abstraktionslevel, der für viele Dinge zu hoch ist - oder anders: Falls du dir nicht AUCH die Frage gestellt hast, wie du einen Körper, eine Gruppe oder ein Monoid modellierst, ist der NICHTS für dich  ). 

Es gibt solche Klassen in verschiedenen Zusammenhängen, 
Vector2f (LWJGL API)
Vector2f (Java 3D API)
und hunderte ähnliche. In mancher Hinsicht ist es trivial, so eine Klasse zu schreiben:

```
class Vector {
    private float x, y;

    // set, add, mul, scale, get, dot, cross und was man sonst so alles braucht
}
```
Der Teufel steckt im Detail, bzw. die Details richten sich nach den genauen Anforderungen. Und eine "one fits all"-Vector-Klasse zu schreiben ist dann wieder schwierig bis unmöglich. Sollte man nicht erstmal ein Interface erstellen? Erbt Vector3D von Vector2D? (NEIN!!! obwohl... :reflect: ). Wird der Vector immutable sein? Welche Auswirkungen auf die Performance hätte das? Gibt es dann auch einen MutableVector? ...

Aber der beschriebene Ansatz ist zumindest einer, mit dem man anfangen kann, wenn man sich um solche Sachen (noch) keine Gedanken machen will.


----------



## Landei (7. Okt 2012)

Wenn  man "nur mal eben schnell" lokal einen Vektor braucht, um einen Algorithmus zu modellieren, und die Vektor-Darstellung nicht quer durch dein Programm gereicht wird, reicht oft ein ganz normales Array. Wenn du dagegen einen Vektor als Resultat zurücklieferst und damit weiterarbeiten willst, ist eine eigene Klasse (oder die einer Bibliothek) der richtige Weg.


----------

