Esempio n. 1
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;
  }
Esempio n. 2
0
  public Raycaster pickingRay(Vector3 vector, Camera camera) {
    vector.z = -1.0f;
    Vector3 end = new Vector3(vector.x, vector.y, 1.0f);

    unprojectVector(vector, camera);
    unprojectVector(end, camera);

    end.sub(vector).normalize();

    return new Raycaster(vector, end);
  }
Esempio n. 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;
  }
Esempio n. 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;
  }
Esempio n. 5
0
 public double distanceToPoint(Vector3 point) {
   Vector3 clampedPoint = _v1.copy(point).clamp(this.min, this.max);
   return clampedPoint.sub(point).length();
 }
Esempio n. 6
0
 public Vector3 size(Vector3 optionalTarget) {
   return optionalTarget.sub(this.max, this.min);
 }
Esempio n. 7
0
 public Matrix3 sub(final Matrix3 m) {
   return new Matrix3(a.sub(m.a), b.sub(m.b), c.sub(m.c));
 }