Package schule.ngb.zm

Class Vector

All Implemented Interfaces:
Serializable, Cloneable

public class Vector extends Point2D.Double
Ein zweidimensionaler Vektor.

Ein Vektor besteht aus zwei Komponenten x und y. Die Vector Klasse unterstützt alle wesentlichen Vektoroperationen wie Skalierung, Addition oder Längen- und Abstandsberechnung. Jede Operation, für die ein Parameter (ein anderer Vektor oder ein Skalar) benötigt werden, gibt es in zwei Varianten: als Objektmethode, die das Vektorobjekt selbst verändert und als Klassenmethode, die einen neuen Vektor erzeugt. Die Objektmethoden unterstützen method chaining und geben jeweils das Vektorobjekt selbst zurück.

Außerdem werden eine Reihe von Hilfsmethoden implementiert, um Zufallsvektoren zu erzeugen, oder die Mausposition als Vektorobjekt zu holen.

Der Vektor der Zeichenmaschine erweitert die Klasse Point2D und lässt sich dadurch einfach mit den Klassen des java.awt Pakets benutzen.

See Also:
  • Nested Class Summary

    Nested classes/interfaces inherited from class java.awt.geom.Point2D

    Point2D.Double, Point2D.Float
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Vector
    Vektor der Ordinatenachse Vector(0.0, 1.0) [unten]
    static final Vector
    Vektor der negativen Abszissenachse Vector(-1.0, 0.0) [links]
    static final Vector
    Vektor der Abszissenachse Vector(1.0, 0.0) [rechts]
    static final Vector
    Vektor der negativen Ordinatenachse Vector(0.0, -1.0) [oben]
    static final Vector
    Der Nullvektor Vector(0.0, 0.0).

    Fields inherited from class java.awt.geom.Point2D.Double

    x, y
  • Constructor Summary

    Constructors
    Constructor
    Description
    Erzeugt den Nullvektor.
    Vector(double x, double y)
    Erzeugt einen Vektor mit den angegebenen Komponenten.
    Vector(Point2D point)
    Erzeugt einen Vektor mit denselben Werten wie der angegebene Punkt.
  • Method Summary

    Modifier and Type
    Method
    Description
    add(double x, double y)
    Addiert die angegebenen Werte zur x- und y-Komponente des Vektors.
    add(Vector vector)
    Addiert den Vektor vector zu diesem.
    static Vector
    add(Vector vector1, Vector vector2)
    Addiert die beiden Vektoren zu einem neuen Vektor.
    double
    Bestimmt den Winkel, den der Vektor mit der Ordinatenachse einschließt in Grad.
    Erzeugt einen neuen Vektor mit denselben Komponenten wie dieses Vektorobjekt.
    double
    cross(Vector vector)
    Berechnet das Kreuzprodukt des Vektors mit dem angegebenen Vektor.
    static double
    cross(Vector vector1, Vector vector2)
    Berechnet das Kreuzprodukt der angegebenen Vektoren.
    double
    distance(Vector vector)
    Berechnet den Abstand zum angegebenen Punkt.
    static double
    distance(Vector vector1, Vector vector2)
    Berechnet den Abstand zwischen den durch die angegebenen Vektoren beschriebenen Punkten.
    double
    Berechnet den quadrierten Abstand zum angegebenen Vektor.
    static double
    distanceSq(Vector vector1, Vector vector2)
    Berechnet den Abstand zum Quadrat zwischen den durch die angegebenen Vektoren beschriebenen Punkten.
    div(double scalar)
     
    static Vector
    div(Vector vector, double scalar)
    Erzeugt einen neuen Vektor der gleich dem angegebenen Vektor durch {code scalar} dividiert ist.
    double
    dot(Vector vector)
    Bestimmt das Skalarprodukt des Vektors mit dem angegebenen Vektor.
    static double
    dot(Vector vector1, Vector vector2)
    Bestimmt das Skalarprodukt der angegebenen Vektoren.
    double
    Bestimmt den Winkel, den der Vektor mit der Ordinatenachse einschließt in Bogenmaß.
    interpolate(Vector vector, double t)
    Verschiebt diesen Vektor um den Faktor t in Richtung des Vektors vector.
    static Vector
    interpolate(Vector vector1, Vector vector2, double t)
    Erzeugt einen Vektor, der auf der Strecke zwischen den angegebenen Vektoren liegt.
    double
    Berechnet die Länge des Vektors.
    double
    Berechnet die quadrierte Länge des Vektors.
    limit(double max)
    Beschränkt die Länge dieses Vektors auf den Bereich 0 bis max.
    limit(double min, double max)
    Beschränkt die Länge dieses Vektors auf den Bereich min bis max.
    morph(Vector vector, double t)
    Verschiebt diesen Vektor um den Faktor t in Richtung des Vektors vector.
    static Vector
    morph(Vector vector1, Vector vector2, double t)
    Erzeugt einen Vektor, der auf der Strecke zwischen den angegebenen Vektoren liegt.
    static final Vector
    Vektor mit der aktuellen Mausposition Vector(mouseX, mouseY)
     
    static Vector
    normalize(Vector vector)
    Erzeugt einen neuen Vektor mit derselben Richtung wie der angegebene Vektor und der Länge 1.
    static Vector
    Erzeugt einen Vektor mit zufälligen Werten.
    static Vector
    random(double min, double max)
    Erzeugt einen Vektor mit zufälligen Werten innerhalb der angegebenen Grenzen.
    static Vector
    random(double minX, double maxX, double minY, double maxY)
    Erzeugt einen Vektor mit zufälligen Werten innerhalb der angegebenen Grenzen.
    rotate(double degree)
    Dreht den Vektor um degree Grad im Uhrzeigersinn.
    static Vector
    rotate(Vector vector, double degree)
    Dreht den Vektor um degree Grad im Uhrzeigersinn.
    rotateRad(double rad)
    Dreht den Vektor um rad im Uhrzeigersinn.
    scale(double scalar)
     
    static Vector
    scale(Vector vector, double scalar)
    Erzeugt einen neuen Vektor der gleich dem angegebenen Vektor um {code scalar} skaliert ist.
    set(double x, double y)
    Setzt die Komponenten dieses Vektors neu.
    set(Point2D pPunkt)
    Setzt die Komponenten dieses Vectors auf die Werte des angegebenen Punktes.
    set(Vector vector)
    Setzt die Komponenten dieses Vectors auf die Werte des angegebenen Vektors.
    setLength(double length)
    Legt die Länge des Vektors fest.
    static Vector
    setLength(Vector vector, double length)
    Erzeugt einen neuen Vektor mit derselben Richtung wie der angegebene Vektor und der Länge length.
    void
    setX(double x)
    Setzt die x-Komponente des Vektors.
    void
    setY(double y)
    Setzt die y-Komponente des Vektors.
    sub(double x, double y)
     
    sub(Vector vector)
     
    static Vector
    sub(Vector vector1, Vector vector2)
    Subtrahiert den zweiten vom ersten Vektor.
     

    Methods inherited from class java.awt.geom.Point2D.Double

    getX, getY, setLocation

    Methods inherited from class java.awt.geom.Point2D

    clone, distance, distance, distance, distanceSq, distanceSq, distanceSq, equals, hashCode, setLocation

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • ZERO

      public static final Vector ZERO
      Der Nullvektor Vector(0.0, 0.0).
    • UP

      public static final Vector UP
      Vektor der negativen Ordinatenachse Vector(0.0, -1.0) [oben]
    • DOWN

      public static final Vector DOWN
      Vektor der Ordinatenachse Vector(0.0, 1.0) [unten]
    • LEFT

      public static final Vector LEFT
      Vektor der negativen Abszissenachse Vector(-1.0, 0.0) [links]
  • Constructor Details

    • Vector

      public Vector()
      Erzeugt den Nullvektor.
    • Vector

      public Vector(double x, double y)
      Erzeugt einen Vektor mit den angegebenen Komponenten.
      Parameters:
      x - Die x-Komponente.
      y - Die y-Komponente.
    • Vector

      public Vector(Point2D point)
      Erzeugt einen Vektor mit denselben Werten wie der angegebene Punkt.
      Parameters:
      point - Ein Punkt, dessen Koordinaten kopiert werden.
  • Method Details

    • mouse

      public static final Vector mouse()
      Vektor mit der aktuellen Mausposition Vector(mouseX, mouseY)
      Returns:
      Einen Vektor mit den Koordinaten des Mauszeigers.
    • random

      public static Vector random()
      Erzeugt einen Vektor mit zufälligen Werten.

      Die Werte liegen zwischen 0 und 100.

      Returns:
      Ein zufälliger Vektor.
    • random

      public static Vector random(double min, double max)
      Erzeugt einen Vektor mit zufälligen Werten innerhalb der angegebenen Grenzen.
      Parameters:
      min - Untere Grenze der Zufallswerte.
      max - Obere Grenze der Zufallswerte.
      Returns:
      Ein zufälliger Vektor.
    • random

      public static Vector random(double minX, double maxX, double minY, double maxY)
      Erzeugt einen Vektor mit zufälligen Werten innerhalb der angegebenen Grenzen.
      Parameters:
      minX - Untere Grenze der x-Komponente.
      maxX - Obere Grenze der x-Komponente.
      minY - Untere Grenze der y-Komponente.
      maxY - Obere Grenze der y-Komponente.
      Returns:
      Ein zufälliger Vektor.
    • normalize

      public static Vector normalize(Vector vector)
      Erzeugt einen neuen Vektor mit derselben Richtung wie der angegebene Vektor und der Länge 1.
      Parameters:
      vector - Der original Vektor.
      Returns:
      Ein neuer Vektor mit der angegebene Länge.
    • sub

      public static Vector sub(Vector vector1, Vector vector2)
      Subtrahiert den zweiten vom ersten Vektor.
      Parameters:
      vector1 - Erster Vektor.
      vector2 - Zweiter Vektor.
      Returns:
      Differenzvektor der beiden Vektoren.
    • scale

      public static Vector scale(Vector vector, double scalar)
      Erzeugt einen neuen Vektor der gleich dem angegebenen Vektor um {code scalar} skaliert ist.
      Parameters:
      vector - Ein Vektor.
      scalar - Ein Skalar.
      Returns:
      Ein skalierter Vektor.
    • div

      public static Vector div(Vector vector, double scalar)
      Erzeugt einen neuen Vektor der gleich dem angegebenen Vektor durch {code scalar} dividiert ist.
      Parameters:
      vector - Ein Vektor.
      scalar - Ein Skalar.
      Returns:
      Ein skalierter Vektor.
    • copy

      public Vector copy()
      Erzeugt einen neuen Vektor mit denselben Komponenten wie dieses Vektorobjekt.
      Returns:
      Eine Kopie dieses Vektors.
    • set

      public Vector set(double x, double y)
      Setzt die Komponenten dieses Vektors neu.
      Parameters:
      x - Der neue x-Wert.
      y - Der neue y-Wert.
      Returns:
      Dieser Vektor selbst (method chaining)
    • set

      public Vector set(Vector vector)
      Setzt die Komponenten dieses Vectors auf die Werte des angegebenen Vektors.
      Parameters:
      vector - Ein Vektor.
      Returns:
      Dieser Vektor selbst (method chaining)
    • set

      public Vector set(Point2D pPunkt)
      Setzt die Komponenten dieses Vectors auf die Werte des angegebenen Punktes.
      Parameters:
      pPunkt - Ein Punkt.
      Returns:
      Dieser Vektor selbst (method chaining)
    • setX

      public void setX(double x)
      Setzt die x-Komponente des Vektors.
      Parameters:
      x - Der neue x-Wert.
    • setY

      public void setY(double y)
      Setzt die y-Komponente des Vektors.
      Parameters:
      y - Der neue y-Wert.
    • length

      public double length()
      Berechnet die Länge des Vektors.

      Zur Berechnung der Länge muss eine Quadratwurzel gezogen werden. Dies ist langsam und kann unter Umständen vermieden werden, wenn mit lengthSq() gearbeitet wird.

      Returns:
      Die Länge des Vektors.
    • lengthSq

      public double lengthSq()
      Berechnet die quadrierte Länge des Vektors.
      Returns:
      Das Quadrat der Länge.
    • setLength

      public Vector setLength(double length)
      Legt die Länge des Vektors fest.
      Parameters:
      length - Die neue Länge des Vektors.
      Returns:
      Dieser Vektor selbst (method chaining)
    • setLength

      public static Vector setLength(Vector vector, double length)
      Erzeugt einen neuen Vektor mit derselben Richtung wie der angegebene Vektor und der Länge length.
      Parameters:
      vector - Der original Vektor.
      length - Die neue Länge des Vektors.
      Returns:
      Ein neuer Vektor mit der angegebene Länge.
    • normalize

      public Vector normalize()
      Returns:
      Dieser Vektor selbst (method chaining)
    • add

      public Vector add(Vector vector)
      Addiert den Vektor vector zu diesem.
      Parameters:
      vector - Ein anderer Vektor.
      Returns:
      Dieser Vektor selbst (method chaining)
    • add

      public Vector add(double x, double y)
      Addiert die angegebenen Werte zur x- und y-Komponente des Vektors.
      Parameters:
      x - Summand x-Komponente.
      y - Summand y-Komponente.
      Returns:
      Dieser Vektor selbst (method chaining)
    • add

      public static Vector add(Vector vector1, Vector vector2)
      Addiert die beiden Vektoren zu einem neuen Vektor.
      Parameters:
      vector1 - Erster Vektor.
      vector2 - Zweiter Vektor.
      Returns:
      Summenvektor der beiden Vektoren.
    • sub

      public Vector sub(Vector vector)
    • sub

      public Vector sub(double x, double y)
    • scale

      public Vector scale(double scalar)
    • div

      public Vector div(double scalar)
    • distance

      public double distance(Vector vector)
      Berechnet den Abstand zum angegebenen Punkt.

      Zur Berechnung der Länge des Differenzvektors muss eine Quadratwurzel gezogen werden. Um Geschwindigkeitsbuße zu vermeiden und auf den genauen Abstand verzichtet werden kann, kann unter Umständen distanceSq(Vector) verwendet werden.

      Parameters:
      vector - Ein anderer Vektor.
      Returns:
      Der Abstand zum Vektor.
    • distance

      public static double distance(Vector vector1, Vector vector2)
      Berechnet den Abstand zwischen den durch die angegebenen Vektoren beschriebenen Punkten.

      Zur Berechnung der Länge des Differenzvektors muss eine Quadratwurzel gezogen werden. Um Geschwindigkeitsbuße zu vermeiden und auf den genauen Abstand verzichtet werden kann, kann unter Umständen distanceSq(Vector, Vector) verwendet werden.

      Parameters:
      vector1 - Der erste Ortsvektor.
      vector2 - Der zweite Ortsvektor.
      Returns:
      Der Abstand zwischen den Vektoren.
    • distanceSq

      public double distanceSq(Vector vector)
      Berechnet den quadrierten Abstand zum angegebenen Vektor.

      Das Quadrat des Abstandes ist in der Regel schneller zu berechnen und ist in vielen Fällen ausreichend. Beispielsweise lassen sich Vergleiche mit dem quadrierten Abstand durchführen, wenn auch die gewünschte Entfernung quadriert wird.

      Parameters:
      vector - Ein anderer Vektor.
      Returns:
      Das Quadrat der Entfernung zum anderen Vektor.
    • distanceSq

      public static double distanceSq(Vector vector1, Vector vector2)
      Berechnet den Abstand zum Quadrat zwischen den durch die angegebenen Vektoren beschriebenen Punkten.

      Das Quadrat des Abstandes ist in der Regel schneller zu berechnen und ist in vielen Fällen ausreichend. Beispielsweise lassen sich Vergleiche mit dem quadrierten Abstand durchführen, wenn auch die gewünschte Entfernung quadriert wird.

      Parameters:
      vector1 - Der erste Ortsvektor.
      vector2 - Der zweite Ortsvektor.
      Returns:
      Der Abstand zwischen den Vektoren.
    • dot

      public double dot(Vector vector)
      Bestimmt das Skalarprodukt des Vektors mit dem angegebenen Vektor.
      Parameters:
      vector - Ein zweiter Vektor.
      Returns:
      Das Skalarprodukt der Vektoren.
    • dot

      public static double dot(Vector vector1, Vector vector2)
      Bestimmt das Skalarprodukt der angegebenen Vektoren.
      Parameters:
      vector1 - Der erste Vektor.
      vector2 - Der zweite Vektor.
      Returns:
      Das Skalarprodukt der Vektoren.
    • cross

      public double cross(Vector vector)
      Berechnet das Kreuzprodukt des Vektors mit dem angegebenen Vektor.
      Parameters:
      vector - Ein Vektor.
      Returns:
      Das Kreuzprodukt der Vektoren.
    • cross

      public static double cross(Vector vector1, Vector vector2)
      Berechnet das Kreuzprodukt der angegebenen Vektoren.
      Parameters:
      vector1 - Der erste Vektor.
      vector2 - Der zweite Vektor.
      Returns:
      Das Kreuzprodukt der Vektoren.
    • limit

      public Vector limit(double max)
      Beschränkt die Länge dieses Vektors auf den Bereich 0 bis max.
      Parameters:
      max - Maximale Länge des Vektors.
      Returns:
      Dieser Vektor selbst (method chaining)
      See Also:
    • limit

      public Vector limit(double min, double max)
      Beschränkt die Länge dieses Vektors auf den Bereich min bis max.
      Parameters:
      min - Minimale Länge des Vektors.
      max - Maximale Länge des Vektors.
      Returns:
      Dieser Vektor selbst (method chaining)
      See Also:
    • angle

      public double angle()
      Bestimmt den Winkel, den der Vektor mit der Ordinatenachse einschließt in Grad.
      Returns:
      Winkel des Vektors in Grad.
    • heading

      public double heading()
      Bestimmt den Winkel, den der Vektor mit der Ordinatenachse einschließt in Bogenmaß.
      Returns:
      Winkel des Vektors in Bogenmaß.
    • rotate

      public Vector rotate(double degree)
      Dreht den Vektor um degree Grad im Uhrzeigersinn.
      Parameters:
      degree - Gradzahl für die Rotation.
      Returns:
      Dieser Vektor selbst (method chaining)
      See Also:
    • rotateRad

      public Vector rotateRad(double rad)
      Dreht den Vektor um rad im Uhrzeigersinn.
      Parameters:
      rad - Winkel der Rotation in Bogenmaß.
      Returns:
      Dieser Vektor selbst (method chaining)
      See Also:
    • rotate

      public static Vector rotate(Vector vector, double degree)
      Dreht den Vektor um degree Grad im Uhrzeigersinn.
      Parameters:
      vector - Ein Vektor.
      degree - Gradzahl für die Rotation.
      Returns:
      Ein gedrehter Vektor.
    • morph

      public Vector morph(Vector vector, double t)
      Verschiebt diesen Vektor um den Faktor t in Richtung des Vektors vector. Im Vergleich zu interpolate(Vector, double) ist t auf den Bereich nur zwischen 0 und 1 beschränkt. Für t gleich 0 passiert nichts, für t wird dieser Vektor zu vector.
      Parameters:
      vector - Der erste Ortsvektor.
      t - Ein Wert zwischen 0 und 1.
      Returns:
      Dieser Vektor selbst (method chaining)
    • morph

      public static Vector morph(Vector vector1, Vector vector2, double t)
      Erzeugt einen Vektor, der auf der Strecke zwischen den angegebenen Vektoren liegt. Der Ort des Vektors auf der Strecke wird relativ von vector1 abhängig von t bestimmt. Im Vergleich zu interpolate(Vector, Vector, double) ist t auf den Bereich nur zwischen 0 und 1 beschränkt. Für t gleich 0 ist der erzeugte Vektor gleich vector1, für t gleich 1 ist das Ergebnis gleich vector2. Für t gleich 0.5 liegt der Vektor genau mittig zwischen den beiden Ortsvektoren.
      Parameters:
      vector1 - Der erste Ortsvektor.
      vector2 - Der zweite Ortsvektor.
      t - Ein Wert zwischen 0 und 1.
      Returns:
      Ein Vektor zwischen den beiden Ortsvektoren.
    • interpolate

      public Vector interpolate(Vector vector, double t)
      Verschiebt diesen Vektor um den Faktor t in Richtung des Vektors vector. Für t gleich 0 ist der erzeugte Vektor gleich vector1, für t gleich 1 ist das Ergebnis gleich vector2. Für t gleich 0.5 liegt der Vektor genau mittig zwischen den beiden Ortsvektoren.

      Negative Werte für t verschieben den Vektor von vector weg und Werte größer 1 schieben ihn über den anderen Vektor hinaus. Soll dies verhindert werden kann morph(Vector, double) verwendet werden.

      Parameters:
      vector - Der erste Ortsvektor.
      t - Ein Wert zwischen 0 und 1.
      Returns:
      Dieser Vektor selbst (method chaining)
    • interpolate

      public static Vector interpolate(Vector vector1, Vector vector2, double t)
      Erzeugt einen Vektor, der auf der Strecke zwischen den angegebenen Vektoren liegt. Der Ort des Vektors auf der Strecke wird relativ von vector1 abhängig von t bestimmt. Für t gleich 0 ist der erzeugte Vektor gleich vector1, für t gleich 1 ist das Ergebnis gleich vector2. Für t gleich 0.5 liegt der Vektor genau mittig zwischen den beiden Ortsvektoren.

      Negative Werte für t verschieben den Vektor von vector weg und Werte größer 1 schieben ihn über den anderen Vektor hinaus. Soll dies verhindert werden kann morph(Vector, Vector, double) verwendet werden.

      Parameters:
      vector1 - Der erste Ortsvektor.
      vector2 - Der zweite Ortsvektor.
      t - Ein Wert zwischen 0 und 1.
      Returns:
      Ein Vektor zwischen den beiden Ortsvektoren.
    • toString

      public String toString()
      Overrides:
      toString in class Point2D.Double