Beispiel #1
0
 /**
  * Bezieht einen Strahl, der in die entgegengesetzte Richtung zeigt
  *
  * @return Der Strahl
  */
 @NotNull
 @ReturnsCachedValue
 public Ray3 getInverted() {
   Vector3 inverted = direction.getInverted();
   Ray3 ray = Ray3.createNew(origin, inverted);
   inverted.recycle();
   return ray;
 }
Beispiel #2
0
  /**
   * Berechnet die Distanz eines Punktes zu diesem Strahl
   *
   * @param point Der Punkt
   * @return Die berechnete Distanz
   */
  public float getDistanceFromPoint(@NotNull final Vector3 point) {

    // http://answers.yahoo.com/question/index?qid=20080912194015AAIlm9X

    Vector3 w = point.sub(origin).crossInPlace(direction);
    float length = w.getLength();

    // aufräumen und raus hier
    w.recycle();
    return length;
  }
Beispiel #3
0
  /**
   * Definiert die Plane über drei Punkte.
   *
   * @param a Erster Punkt
   * @param b Zweiter Punkt
   * @param c Dritter Punkt
   * @return Diese Instanz für method chaining
   */
  @NotNull
  public Plane3 set(@NotNull final Vector3 a, @NotNull final Vector3 b, @NotNull final Vector3 c) {
    assert !a.equals(b) && !b.equals(c); // TODO: Dürfen nicht auf einer Geraden liegen!

    // Normale berechnen: _normal = a.sub(b).cross(a.sub(c));
    final Vector3 aSubB = a.sub(b);
    Vector3 aSubC = a.sub(c);

    _normal.set(aSubB.cross(aSubC));
    _normal.normalize();

    // aSubB freigeben.
    // aSubC wird noch nicht freigegeben, da wir den Wert in Kürze weiterverwenden werden
    aSubB.recycle();

    // Entfernung berechnen
    final Vector3 invNormal = aSubC;
    invNormal.set(_normal).invert();
    _distanceToOrigin = invNormal.dot(a);
    invNormal.recycle();
    return this;
  }
Beispiel #4
0
  /**
   * Projiziert einen Punkt auf den Strahl
   *
   * @param point Der Punkt
   * @return Der projizierte Punkt
   */
  @NotNull
  @ReturnsCachedValue
  public Vector3 projectPoint(@NotNull final Vector3 point) {
    // Richtung bestimmen und auf Richtungsvektor projizieren
    Vector3 w = point.sub(origin);
    Vector3 projected =
        direction.mul(
            w.dot(
                direction)); // TODO: Als static herausziehen, damit für diesen Test das Caching der
                             // anderen Werte nicht nötig ist

    w.recycle();
    return projected;
  }