Package pi

Class Vector

java.lang.Object
pi.Vector
All Implemented Interfaces:
Cloneable

@API public final class Vector extends Object implements Cloneable
Beschreibt einen zweidimensionalen Vektor auf der Zeichenebene. Diese Klasse wird für alle Positions- und Richtungsangaben genutzt.
Author:
Michael Andonie
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Vector
    Konstante für eine einfache Verschiebung nach unten (0, 1).
    static final Vector
    Konstante für eine einfache Verschiebung nach links (-1, 0).
    static final Vector
    Konstante für einen „bewegungslosen“ Vektor (0, 0).
    static final Vector
    Konstante für eine einfache Verschiebung nach rechts (1, 0).
    static final Vector
    Konstante für eine einfache Verschiebung nach oben (0, -1).
  • Constructor Summary

    Constructors
    Constructor
    Description
    Vector(double x, double y)
    Erzeugt einen neuen Vektor.
    Vector(Vector start, Vector end)
    Erzeugt einen Vektor als Bewegung von einem Ausgangspunkt zu einem Zielpunkt.
  • Method Summary

    Modifier and Type
    Method
    Description
    add(double x, double y)
    Berechnet die effektive Bewegung, die dieser Vektor und ein weiterer zusammen ausüben.
    add(Vector other)
    Berechnet die effektive Bewegung, die dieser Vector und ein weiterer zusammen ausüben.
    double
    Gibt den Winkel dieses Vektors in Grad zurück.
    double
    angle(Vector other)
    Berechnet den Winkel zwischen diesem Vektor und einem weiteren in Grad.
     
    Berechnet die Richtung des Vektors, in die er wirkt.
    Gibt den Vektor an, der den Punkt, den dieser Vektor beschreibt, zu dem Punkt verschieben würde, den ein weiterer Vektor beschreibt.
    divide(double divisor)
    Teilt die effektive Länge des Vektors durch eine Zahl und kürzt dadurch seine Effektivität.
    boolean
    equals(Object object)
    Prüft, ob ein beliebiges Objekt gleich diesem Vektor ist.
    double
    Berechnet das Skalarprodukt von diesem Vektor mit einem weiteren.
    boolean
    Gibt zurück, ob dieser Vektor echt ganzzahlig ist, also ob seine tatsächlichen Delta-Werte beide Ganzzahlen sind.
    boolean
     
    boolean
    Berechnet, ob dieser Vektor keine Wirkung hat.
    double
    Gibt die Länge des Vektors aus.
    double
    length(Vector other)
    Gibt die euklidische Distanz zwischen diesem Vektor und dem angegebenen Vektor zurück.
    double
    Gibt die Manhattan-Länge des Vektors zurück.
    multiply(double factor)
    Multipliziert die effektiven Längen beider Anteile des Vektors (x und y) mit einem festen Faktor.
    multiplyX(double factor)
    Multipliziert die effektive Länge des x-Anteils des Vektors mit einem festen Faktor.
    multiplyY(double factor)
    Multipliziert die effektive Länge des y-Anteils des Vektors mit einem festen Faktor.
    Berechnet die Gegenrichtung des Vektors.
    Berechnet die Gegenrichtung des Vektors in X-Richtung.
    Berechnet die Gegenrichtung des Vektors in Y-Richtung.
    Gibt eine Normierung des Vektors aus.
    static Vector
    ofAngle(double angle)
    Berechnet anhand eines Winkels, der in Grad angegeben ist, den entsprechenden Vektor.
    double
    Gibt den Winkel dieses Vektors in Bogenmaß zurück.
    rotate(double angle)
    Berechnet eine rotierte Version.
    subtract(double x, double y)
    Berechnet die Differenz zwischen diesem und einem weiteren Vektor.
    Berechnet die Differenz zwischen diesem und einem weiteren Vektor.
    Gibt die String-Repräsentation dieses Objektes aus.
    static Vector
    v(double x, double y)
    Erzeugt einen neuen Vektor.
    static Vector
    vector(double x, double y)
    Erzeugt einen neuen Vektor.
    double
    x()
    Gibt den Bewegungsanteil in x-Richtung zurück.
    int
    x(double scaleFactor)
    Gibt den Bewegungsanteil in x-Richtung als Ganzzahl zurück.
    double
    y()
    Gibt den Bewegungsanteil in y-Richtung zurück.
    int
    y(double scaleFactor)
    Gibt den Bewegungsanteil in y-Richtung multipliziert mit Pixel per Meter zurück.

    Methods inherited from class java.lang.Object

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

    • NULL

      @API public static final Vector NULL
      Konstante für einen „bewegungslosen“ Vektor (0, 0).
    • LEFT

      @API public static final Vector LEFT
      Konstante für eine einfache Verschiebung nach links (-1, 0).
    • UP

      @API public static final Vector UP
      Konstante für eine einfache Verschiebung nach oben (0, -1).
    • DOWN

      @API public static final Vector DOWN
      Konstante für eine einfache Verschiebung nach unten (0, 1).
  • Constructor Details

    • Vector

      @API public Vector(double x, double y)
      Erzeugt einen neuen Vektor.
      Parameters:
      x - Der Bewegungsanteil in x-Richtung.
      y - Der Bewegungsanteil in y-Richtung.
    • Vector

      @API public Vector(Vector start, Vector end)
      Erzeugt einen Vektor als Bewegung von einem Ausgangspunkt zu einem Zielpunkt.
      Parameters:
      start - Der Ausgangspunkt.
      end - Der Zielpunkt.
  • Method Details

    • ofAngle

      public static Vector ofAngle(double angle)
      Berechnet anhand eines Winkels, der in Grad angegeben ist, den entsprechenden Vektor.
      • Der Vektor für 0 Grad ist [x = 1; y = 0]
      • Der Vektor für 90 Grad ist [x = 0; y = 1]
      • Der Vektor für 180 Grad ist [x = -1; y = 0]
      • Der Vektor für 270 Grad ist [x = 0; y = -1]
      • Der Vektor für 360 Grad ist [x = 1; y = 0]
      Parameters:
      angle - Der Winkel in Grad.
      Returns:
      Der Vektor, der sich aus einem Winkel berechnet.
    • x

      @API @Getter public double x()
      Gibt den Bewegungsanteil in x-Richtung zurück.
      Returns:
      Der Bewegungsanteil in x-Richtung.
    • x

      @API @Getter public int x(double scaleFactor)
      Gibt den Bewegungsanteil in x-Richtung als Ganzzahl zurück.
      Parameters:
      scaleFactor - Der Skalierungsfaktor, mit dem die x-Koordinate multipliziert wird.
      Returns:
      Der gerundete skalierte Bewegungsanteil in x-Richtung.
      Since:
      0.36.0
    • y

      @API @Getter public double y()
      Gibt den Bewegungsanteil in y-Richtung zurück.
      Returns:
      Der Bewegungsanteil in y-Richtung.
    • y

      @API @Getter public int y(double scaleFactor)
      Gibt den Bewegungsanteil in y-Richtung multipliziert mit Pixel per Meter zurück.
      Parameters:
      scaleFactor - Der Skalierungsfaktor, mit dem die y-Koordinate multipliziert wird.
      Returns:
      Der gerundete skalierte Bewegungsanteil in y-Richtung.
      Since:
      0.36.0
    • normalize

      @API public Vector normalize()
      Gibt eine Normierung des Vektors aus. Dies ist ein Vektor, der
      • in dieselbe Richtung wie der ursprüngliche Vektor zeigt.
      • eine Länge von (möglichst) exakt 1 hat.
      • Der Null-Vektor bleibt der Null-Vektor.
      Returns:
      Der Normierte Vektor zu diesem Vektor.
    • divide

      @API public Vector divide(double divisor)
      Teilt die effektive Länge des Vektors durch eine Zahl und kürzt dadurch seine Effektivität.
      Parameters:
      divisor - Hierdurch wird die Länge des Vektors auf der Zeichenebene geteilt.
      Returns:
      Das Vektor-Objekt, das eine Bewegung in dieselbe Richtung beschreibt, allerdings in der Länge gekürzt um den angegebenen Divisor.
      Throws:
      ArithmeticException - Falls divisor 0 ist.
      See Also:
    • length

      @API @Getter public double length()
      Gibt die Länge des Vektors aus.
      Returns:
      Die Länge des Vektors.
    • length

      @Getter public double length(Vector other)
      Gibt die euklidische Distanz zwischen diesem Vektor und dem angegebenen Vektor zurück.
      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      die Länge des Differenzvektors (euklidische Distanz)
      Throws:
      NullPointerException - falls other null ist
      Since:
      0.37.0
    • negate

      @API public Vector negate()
      Berechnet die Gegenrichtung des Vektors.
      Returns:
      Ein neues Vektor-Objekt, das genau die Gegenbewegung zu dem eigenen beschreibt.
    • negateX

      @API public Vector negateX()
      Berechnet die Gegenrichtung des Vektors in X-Richtung.
      Returns:
      Ein neues Vektor-Objekt, das genau die Gegenbewegung zu dem eigenen beschreibt.
    • negateY

      @API public Vector negateY()
      Berechnet die Gegenrichtung des Vektors in Y-Richtung.
      Returns:
      Ein neuer Vektor, der genau die Gegenbewegung zum eigenen Vektor beschreibt.
    • add

      @API public Vector add(double x, double y)
      Berechnet die effektive Bewegung, die dieser Vektor und ein weiterer zusammen ausüben.
      Parameters:
      x - Die Änderung in X-Richtung.
      y - Die Änderung in Y-Richtung.
      Returns:
      Ein neues Vektor-Objekt, das die Summe der beiden ursprünglichen Bewegungen darstellt.
    • add

      @API public Vector add(Vector other)
      Berechnet die effektive Bewegung, die dieser Vector und ein weiterer zusammen ausüben.
      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      Ein neues Vektor-Objekt, das die Summe der beiden ursprünglichen Bewegungen darstellt.
    • subtract

      @API public Vector subtract(double x, double y)
      Berechnet die Differenz zwischen diesem und einem weiteren Vektor.
      Parameters:
      x - Änderung in X-Richtung
      y - Änderung in Y-Richtung
      Returns:
      Die Differenz der beiden Vektoren ("this - v")
    • subtract

      @API public Vector subtract(Vector other)
      Berechnet die Differenz zwischen diesem und einem weiteren Vektor.
      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      Die Differenz der beiden Vektoren (this - other)
    • rotate

      @API public Vector rotate(double angle)
      Berechnet eine rotierte Version.
      Parameters:
      angle - Der Winkel der Rotation in Grad.
      Returns:
      Ein neues Vektor-Objekt, das entsprechend der Gradzahl rotiert wurde.
    • distance

      @API @Getter public Vector distance(Vector other)
      Gibt den Vektor an, der den Punkt, den dieser Vektor beschreibt, zu dem Punkt verschieben würde, den ein weiterer Vektor beschreibt.
      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      Der Vektor, der (this.x|this.y) verschieben würde zu (v.x|v.y).
    • multiply

      @API public Vector multiply(double factor)
      Multipliziert die effektiven Längen beider Anteile des Vektors (x und y) mit einem festen Faktor.

      Dadurch entsteht ein neuer Vektor mit anderen Werten, welcher zurückgegeben wird.

      Parameters:
      factor - Der Faktor, mit dem die x- und y-Werte des Vektors multipliziert werden.
      Returns:
      Der Vektor mit den multiplizierten Werten.
      See Also:
    • multiplyX

      @API public Vector multiplyX(double factor)
      Multipliziert die effektive Länge des x-Anteils des Vektors mit einem festen Faktor.

      Dadurch entsteht ein neuer Vektor mit anderen Werten, welcher zurückgegeben wird.

      Parameters:
      factor - Der Faktor, mit dem der x-Wert des Vektors multipliziert wird.
      Returns:
      Der Vektor mit den multiplizierten Werten.
      See Also:
    • multiplyY

      @API public Vector multiplyY(double factor)
      Multipliziert die effektive Länge des y-Anteils des Vektors mit einem festen Faktor.

      Dadurch entsteht ein neuer Vektor mit anderen Werten, welcher zurückgegeben wird.

      Parameters:
      factor - Der Faktor, mit dem der y-Wert des Vektors multipliziert wird.
      Returns:
      Der Vektor mit den multiplizierten Werten.
      See Also:
    • getScalarProduct

      @API public double getScalarProduct(Vector other)
      Berechnet das Skalarprodukt von diesem Vektor mit einem weiteren.

      Das Skalarprodukt für zweidimensionale Vektoren ist: (a, b) o (c, d) = a * b + c * d

      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      Skalarprodukt dieser Vektoren mit dem Vektor v.
    • isNull

      @API public boolean isNull()
      Berechnet, ob dieser Vektor keine Wirkung hat. Dies ist der Fall, wenn beide Komponenten (x und y) 0 sind.
      Returns:
      true, wenn dieser keine Auswirkungen macht, sonst false.
    • isIntegral

      @API public boolean isIntegral()
      Gibt zurück, ob dieser Vektor echt ganzzahlig ist, also ob seine tatsächlichen Delta-Werte beide Ganzzahlen sind.
      Returns:
      true, wenn beide Delta-Werte dieses Punktes ganzzahlig sind, sonst false.
    • direction

      @API @Getter public Direction direction()
      Berechnet die Richtung des Vektors, in die er wirkt.
      Returns:
      Der Wert der Konstanten, die diese Bewegung widerspiegelt.
    • equals

      @API public boolean equals(Object object)
      Prüft, ob ein beliebiges Objekt gleich diesem Vektor ist.

      Zwei Vektoren gelten als gleich, wenn x und y der beiden Vektoren übereinstimmen.
      Overrides:
      equals in class Object
      Parameters:
      object - Das auf Gleichheit mit diesem zu überprüfende Objekt.
      Returns:
      true, wenn beide Vektoren gleich sind, sonst false.
    • clone

      public Vector clone() throws CloneNotSupportedException
      Overrides:
      clone in class Object
      Throws:
      CloneNotSupportedException
    • manhattanLength

      @API @Getter public double manhattanLength()
      Gibt die Manhattan-Länge des Vektors zurück. Diese ist für v=(a, b) definiert als a+b.
      Returns:
      Die Summe von delta X und delta Y des Vektors.
    • angle

      @Getter public double angle()
      Gibt den Winkel dieses Vektors in Grad zurück.

      Der Wert wird durch Umrechnung des von radians() gelieferten Winkels (Bogenmaß) mit Math.toDegrees(double) in Grad ermittelt. Der genaue Wertebereich hängt vom Rückgabewert von radians() ab (z. B. (-π, π] → (-180°, 180°], [0, 2π) → [0°, 360°)).

      Returns:
      Winkel des Vektors in Grad
      Since:
      0.37.0
    • radians

      @Getter public double radians()
      Gibt den Winkel dieses Vektors in Bogenmaß zurück.

      Der Winkel ist derjenige zwischen der positiven x-Achse und dem Vektor (x, y), gemessen gegen den Uhrzeigersinn. Der zurückgegebene Wert liegt im Bereich [-π, π].

      Für den Nullvektor (0, 0) wird 0 zurückgegeben.

      Returns:
      Winkel in Bogenmaß im Bereich [-π, π]
      Since:
      0.37.0
    • angle

      @Getter public double angle(Vector other)
      Berechnet den Winkel zwischen diesem Vektor und einem weiteren in Grad.

      Hierzu wird diese Formel verwendet: cos t = [a o b] / [|a| * |b|]

      • cos ist der Kosinus
      • t ist der gesuchte Winkel
      • a und b sind die Vektoren
      • |a| ist die Länge des Vektors a
      Parameters:
      other - Ein weiterer Vektor.
      Returns:
      Der Winkel zwischen diesem Vektor und dem zweiten.
    • isNaN

      @API public boolean isNaN()
    • vector

      public static Vector vector(double x, double y)
      Erzeugt einen neuen Vektor.

      Diese statische Methode kann dazu benutzt werden, um über einen statischen Import dieser Methode

      import static pi.Vector.vector;

      mit etwas weniger Schreibarbeit einen neuen Vektor zu erzeugen. Anstatt

      new Vector(1, 2);

      kann dann

      vector(1, 2);

      geschrieben werden.

      Parameters:
      x - Der Bewegungsanteil in x-Richtung.
      y - Der Bewegungsanteil in y-Richtung.
    • v

      public static Vector v(double x, double y)
      Erzeugt einen neuen Vektor.

      Diese statische Methode kann dazu benutzt werden, um über einen statischen Import dieser Methode

      import static pi.Vector.v;

      mit etwas weniger Schreibarbeit einen neuen Vektor zu erzeugen. Anstatt

      new Vector(1, 2);

      kann dann

      v(1, 2);

      geschrieben werden.

      Parameters:
      x - Der Bewegungsanteil in x-Richtung.
      y - Der Bewegungsanteil in y-Richtung.
    • toString

      public String toString()
      Gibt die String-Repräsentation dieses Objektes aus.

      Diese Methode sollte nur zu Debugging-Zwecken benutzt werden.

      Overrides:
      toString in class Object
      Returns:
      Die String-Repräsentation dieses Vektors.