/** * 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; }
/** * Erzeugt eine Plane aus drei Punkten * * @param a Erster Punkt * @param b Zeiter Punkt * @param c Dritter Punkt */ private Plane3(@NotNull final Vector3 a, @NotNull final Vector3 b, @NotNull final Vector3 c) { assert !a.equals(b) && !b.equals(c); set(a, b, c); }
// Equals public boolean equals(final Matrix3 o) { return this == o ? true : a.equals(o.a) && b.equals(o.b) && c.equals(o.c); }