# Vektor für Gravitation erzeugen



## Javaman91 (21. Jul 2016)

Hallo,

ich programmiere gerade an einer Gravitation.
Nun wollte ich einen Vektor erzeugen mit folgender Codezeile:

```
Vector vector = new Vector(x, y);
```
Leider wird diese Codezeile rot unterstrichen.
Wenn ich das x & y entferne, dann kommt keine Fehlermeldung mehr.
Da ich aber x & y als Parameter an den Vektor übergeben muss, wollte ich euch Fragen wie ich das sonst machen kann?
Der Vektor befindet sich einfach zwischen zwei Objekten. Die Parameter x & y geben einfach den Start und Endpunkt des Vektors an.

MfG


----------



## thecain (21. Jul 2016)

Wie wärs wenn du in der Javadoc nachliest was Vector ist?

Wahrscheinlich nicht das was du hier erwartest


----------



## JCODA (21. Jul 2016)

Benutzt du eine spezielle Library? Der java.util.Vector ist eine Liste, die nicht wirklich dafür geeignet ist, eine mathmatischen Vektor zu repräsentieren.
Entweder du schreibst eine "echte" Vektor-Klasse selbst oder du benutzt eine Library wie z.b. apach-commons-math
https://commons.apache.org/proper/commons-math/apidocs/index.html
2DVector: https://commons.apache.org/proper/c...s/math3/geometry/euclidean/twod/Vector2D.html


----------



## Javaman91 (24. Jul 2016)

Erstmal muss ich mich bedanken!
Sorry das ich mich erst jetzt melde, hatte viel zu arbeiten.
Wo finde ich die Vector2D Library?

Mit:

```
import java.math.geom2d.Vector2D;
```
funktioniert es nicht.

Was ich euch noch Fragen wollte, was ist der Unterschied zwischen: vector, vector2f & vector2D?
In der Mathematik gibt es doch nur einen Vektor?
Ich blicke da nicht ganz durch, was da der unterschied in der Programmierung ist.
Leider finde ich in Google nur englische Erklärungen die mir keine Antwort geliefert haben.

MfG


----------



## Cromewell (24. Jul 2016)

Javaman91 hat gesagt.:


> Wo finde ich die Vector2D Library?


Wurde doch verlinkt?
Vector2f ist, denke ich mal, ein float Vektor - also mit Kommazahl.
Und Vector2D double, wie es scheint ( von der Apache Seite: *Vector2D*(double x, double y))

Zu vector, wenn du damit die Klasse aus der normalen standard Lib meinst, ist eine Art Array (https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html)


----------



## JCODA (24. Jul 2016)

Ich hab gerade in seinen alten Beiträgen gefunden, dass er Slick verwendet. (@Javaman91 das wäre die Library, nach der ich gefragt habe... )
Jedenfalls benutzt du in deinen alten Beiträgen bereits org.newdawn.slick.geom.Vector2f;
Sogar mit eigener Erklärung?!
http://www.java-forum.org/thema/kollision-genau-erkennen-mit-intersects.173093/


Javaman91 hat gesagt.:


> Danke für den Link!
> 
> Ich fasse mal kurz zusammen, wie ich das Verstanden habe.
> Slick2D bietet eine Klasse an mit der man Vektoren erzeugen kann. Die Klasse lautet: „Vector2f“.
> ...



Achso und Vektoren besitzen keinen "Anfangs und Endpunkt". Vektoren beschreiben nur eine Verschiebung um x,y Einheiten. 
Wenn du von Anfangs/Endpunkt auf die Verschiebung kommen willst, musst du Endpunkt minus Anfangspunkt rechnen...


----------



## Javaman91 (24. Jul 2016)

1. Ich weiß, dass ich einen Beitrag bezüglich Vektoren in Java verfasst habe und auch eine eigene Erklärung abgegeben habe.
Ich habe hier nur deshalb einen neuen Beitrag zum Thema Vektoren eröffnet, da ich in Eclips mit "vector" & "vector2f" ständig einen Fehler bekommen habe. Da ich aber dank euch nun weiß, das "2f" für float und "2d" für double steht habe ich nun auch gleich den Fehler gefunden.
Bei mir ist x und y ein double gewesen und ich habe versucht mit diesen Werten einen "vector" & "vector2f" zu erzeugen, deshalb ging es nicht.

2. Wenn Vektoren keinen Anfangs und Endpunkt besitzen, dann beschreibt der Betrag eines Vektors nur die Differenz zwischen zwei Punkten. Das heißt das der Betrag des Vektors nur die Länge des Vektors angibt?
Ist das so richtig?


----------



## JCODA (24. Jul 2016)

Javaman91 hat gesagt.:


> 2. Wenn Vektoren keinen Anfangs und Endpunkt besitzen, dann beschreibt der Betrag eines Vektors nur die Differenz zwischen zwei Punkten. Das heißt das der Betrag des Vektors nur die Länge des Vektors angibt?
> Ist das so richtig?


Also deine "Folgerung" kann ich zwar nicht nachvollziehen, aber ja, der Betrag (oder mathematischer: die Norm) ist die Länge des Vektors.


----------



## Cromewell (24. Jul 2016)

Javaman91 hat gesagt.:


> Das heißt das der Betrag des Vektors nur die Länge des Vektors angibt?


Ja, der Betrag eines Vektors ist seine Länge.


----------



## Javaman91 (24. Jul 2016)

Leider habe ich dann nicht Verstanden, wie ein Vektor in Java gezeichnet wird?
Ich bin immer davon ausgegangen, das ein Vektor bei 0,0 beginnt und ich mit x,y nur den Endpunkt angeben muss.

Beispiel:

```
Vektor2f vector = new Vektor2f(x, y)[/java]

Wenn ich nun z.B. zwei Objekte habe die sich in einem bestimmten Abstand zueinander befinden, dann erzeuge ich zwei Vektoren. Beide Vektoren starten immer bei 0,0 das ist bei der Erzeugung eines Vektors automatisch festgelegt (so habe ich das Verstanden). Möchte ich nun z.B. den Abstand zwischen den Objekten ermitteln, dann Subtrahiere ich beide Vektoren und bekomme dann den Abstand der beiden Objekte als Zahlenwert.

So habe ich das Verstanden?
```


----------



## Javaman91 (24. Jul 2016)

Leider habe ich dann nicht Verstanden, wie ein Vektor in Java gezeichnet wird?
Ich bin immer davon ausgegangen, das ein Vektor bei 0,0 beginnt und ich mit x,y nur den Endpunkt angeben muss.

Beispiel:

```
Vektor2f vector = new Vektor2f(x, y)
```

Wenn ich nun z.B. zwei Objekte habe die sich in einem bestimmten Abstand zueinander befinden, dann erzeuge ich zwei Vektoren. Beide Vektoren starten immer bei 0,0 das ist bei der Erzeugung eines Vektors automatisch festgelegt (so habe ich das Verstanden). Möchte ich nun z.B. den Abstand zwischen den Objekten ermitteln, dann Subtrahiere ich beide Vektoren und bekomme dann den Abstand der beiden Objekte als Zahlenwert.

So habe ich das Verstanden?


----------



## thecain (24. Jul 2016)

https://de.wikipedia.org/wiki/Vektor

Und so ists auch in Java. Ein Betrag und eine Richtung. Keine position


----------



## Javaman91 (24. Jul 2016)

Das weiß ich auch, das ein Vektor eine bestimmte Richtung und Länge hat.
Meine Frage war aber, wozu die Werte "x & y" bei der erzeugung eines Vektors benötigt werden?
Was geben diese zwei Werte an?


----------



## thecain (24. Jul 2016)

Die richtung und den betrag


----------



## JCODA (24. Jul 2016)

x und y geben an, welche Verschiebung der Vektor beschreibt, x horizontal, y vertikal. 
Natürlich kann man das interpretieren als Vektor der auf (x,y) zeigt.


----------



## Javaman91 (24. Jul 2016)

Ist  x & y eine Koordinate am Bildschirm?
Also z.B. 10 pixel auf der x-Achse und 20 Pixel auf der y-Achse?
Als Ergebnis bekomme ich dann einen Punkt am Bildschirm zu den dann ein Vektor zeigt.


----------



## thecain (24. Jul 2016)

Nein, 
x = x-verschiebung y = y verschiebung
sqrt(x^2+y^2)

Ein Vektor hat keine Koordinate


----------



## JCODA (24. Jul 2016)

Sagen wir es so:
Man kann jeden Punkt (x,y) als Vektor (x,y) darstellen.
Wenn man eine Strecke mit Start und Endpunkt darstellen möchte, benötigt man eben zwei Vektoren:
Anfangspunkt und Endpunkt als Vektoren oder
Anfangspunkt und Verschiebung.


----------



## Javaman91 (24. Jul 2016)

Hat jemand eine Zeichnung, damit ich Verstehe wie die verschiebung eines Vektors erfolgt.
Denn wenn x & y die verschiebung angeben, wie weiß das Programm dann wie Lang der Vektor sein muss?


----------



## thecain (24. Jul 2016)

Auf dem von mir verlinkten Wiki-Artikel hats viele.

A = Punkt(1, 1) Koordinaten
A' = Punkt(3,3) Koordinaten

Vector A->A' Der Vektor der A auf A' abbildet
Dann wäre der Vektor A->A'(2,2) und dessen Betrag = sqrt(2^2+2^2) also ca. 2.8

Aber das sind Basics, diese müssten klar sein vor dem Start mit Spieleentwicklung


----------



## Tobse (24. Jul 2016)

> Ist x & y eine Koordinate am Bildschirm?



Vektoren haben mit deinem Bildschirm garnix zu tun. Vektoren sind ein Mathematisches Konstrukt. Man kann auch einen Vektor nicht sinnvoll zeichnen, weil er nur eine Länge und eine Richtung angibt, aber keinen Punkt.

Es gibt eine Ausnahme: Angenommen du hast einen Punkt , dann gibt es einen Ortsvektor zu , nämlich  , der vom Ursprung zum Punkt P zeigt. Den Ortsvektor notiert man dann  



> Denn wenn x & y die verschiebung angeben, wie weiß das Programm dann wie Lang der Vektor sein muss?


Über den Satz des Pythagoras:


----------



## Javaman91 (24. Jul 2016)

O.K.
Ich erkläre das nochmal wie ich das jetzt mit der Erklärung von Tobse verstanden habe.

Die x&y Werte die ich bei der erzeugung eines Vektors in Java angebe, geben mir einen Punkt an zu dem der Vektor zeigt (der Punkt gibt die Richtung an in die der Pfeil zeigt). Mit Hilfe des Pythagoras weiß ich wie lange der Vektor ist. Der Vektor geht immer vom Ursprung aus (0,0).

Stimmt das jetzt?


----------



## thecain (24. Jul 2016)

Nein. Lies den Wikipedia-Artikel... (Oder die ganze Antwort von Tobse, nicht nur das, was zu deinem bisherigen Verständnis passt)
Ein Vektor gibt eine Richtung an. Keinen Punkt. Ein Vektor hat keine Koordinate

Ein Vektor KANN vom Ursprung aus gezeichnet werden und zeigt dann auf den Punkt (der Vektor ist dann 0->P, bei Punkt P), welcher seinen Komponenten entspricht, aber das ist nicht das wozu der Vektor da ist.

Vektor != Punkt
der selbe Vektor könnten auch den Ursprung 1,1 haben, dann müsstest du ihn von 1,1 aus zeichnen. Es ist aber trotzdem noch der selbe Vektor


----------



## Tobse (24. Jul 2016)

In Ergänzung zum letzten Post von @thecain hier nochmal ein bild, wenn das hilft:



EDIT:

Nochmal im Detail ein einzelner Vektor:

 

Steht auch alles genau so auf Wikipedia; einfach lesen (oder optional Unterlagen vom Mathematikunterricht der 10. Klasse am Gymnasium lesen)


----------



## Jardcore (25. Jul 2016)

Um das Verständnis hier ein wenig aufzulockern. In der Spielentwicklung werden Punkte leider oft mit Hilfe von Vektoren angegeben. Und sind damit dort synonym zum Punkt zu sehen.

```
public class Transform {
    public Vector2 position = new Vector2(10,10);
    public Vector2 rotation = new Vector2(0,0);
    public Vector2 scale = new Vector2(1,1);
}
```
Der obige Code zeigt Beispielsweise die Implementierung einer Transform Klasse, welche die Position, Rotation und Skalierung als Vector beinhaltet.
Hier wird der Vector jedoch nur als Container verwendet um Koordinaten zu speichern. "position" gibt hier wirklich nur einen Punkt (10,10) in dem benutzten Koordinatensystems an.


----------



## Cromewell (25. Jul 2016)

Die Seite kann ich auch empfehlen: http://www.brinkmann-du.de/mathe/gost/p50_vektor_01.htm


----------



## Tobse (25. Jul 2016)

Jardcore hat gesagt.:


> In der Spielentwicklung werden Punkte leider oft mit Hilfe von Vektoren angegeben.


Warum leider? Es macht das rechnen einfacher und man muss nicht mit zwei Datentypen jonglieren. Wenn es offensichtlich ist, dass es sich um Ortsvektoren handelt, ist das IMHO völlig in Ordnung.


----------



## Jardcore (25. Jul 2016)

Leider, weil es dem Verständnis der Vektorrechnung nicht behilflich ist.
Für die Spielentwicklung ist das wunderbar, ich profitiere auch davon


----------



## thecain (25. Jul 2016)

Es ist sicher behilflich. Wenn du z.b. eine Bewegung oder wie hier eine Gravitation abbilden willst. Du musst dann halt einfach auch mit den entsprechenden operationen arbeiten


----------



## Javaman91 (25. Jul 2016)

Jetzt habe ich es!
Der x & y Wert den ich bei der Erzeugung eines Vektors angebe:

```
Vector2f vektor = new Vector2f(x, y);
```
wird einerseits zur Bestimmung des Betrages (Betrag = Länge des Vektors) verwenden. Dies wird mit Hilfe des Pythagoras gemacht, da ich zwei bekannte Werte habe und dadurch die Länge des Vektors berechnen kann. Haben wir bereits weiter oben schon geklärt.

Weiters werden diese Werte verwendet um auch die Richtung des Vektors zu bestimmen.

Beispiel:
Wenn z.B. x = 5 und y = 8 ist, dann zeigt der Vektor in eine bestimmte Richtung.
Wenn jetzt aber z.B. x =2 und y = 2, dann zeigt der Vektor in eine andere Richtung.
Das heißt, das ich mit dem x & y Wert nicht nur die Länge des Vektors sondern auch die Richtung angeben kann (Anbei noch ein Bild zum Beispiel).

Jetzt sollte es aber passen?


----------



## Javaman91 (26. Jul 2016)

Habe ich das jetzt so Richtig erklärt?


----------



## thecain (26. Jul 2016)

Ja, soweit ok


----------



## Javaman91 (26. Jul 2016)

"Ja, soweit ok" bedeutet für mich "naja, so ganz stimmt das nicht".
Es kann doch nur so sein, wie ich das geschrieben habe.
Wenn ich nur zwei Werte, also x & y habe, dann geht das ja garnicht anders, also muss das was ich in #30 geschrieben habe Richtig sein?


----------



## Cromewell (26. Jul 2016)

Javaman91 hat gesagt.:


> also muss das was ich in #30 geschrieben habe Richtig sein?


Ist es ja auch ^^


----------



## Javaman91 (26. Jul 2016)

Super danke für die Hilfe!

Ich bin lästig, aber oft erscheint einem etwas richtig da es einem als logisch erscheint.
Das heißt aber leider nicht immer das es auch richtig ist!
Deshalb muss ich einfach mehrmals Nachfragen

MfG


----------

