Posts mit dem Label mathematik werden angezeigt. Alle Posts anzeigen
Posts mit dem Label mathematik werden angezeigt. Alle Posts anzeigen

Samstag, 29. Januar 2011

Nice To Know: Kollinearität von drei Punkten im Dreidimensionalen

Um zu bestimmen, ob drei Punkte im Dreidimensionalen auf einer Geraden liegen, also kollinear sind, lässt sich eine Flächenberechnung des Dreiecks missbrauchen, die in folgender Formel gegeben ist:



Drei Punkte x, y und z sind kollinear, wenn die Fläche des durch sie erzeugten Dreieckes 0 ist. Da also nur interessant ist, ob die Fläche 0 ist oder nicht, kann man sich an der Formel das Dividieren durch zwei und das Wurzel ziehen sparen. Das ändert nichts an der Tatsache, ob die Dreiecksfläche 0 oder nicht 0 ist.

Damit lässt sich folgender Code in Java zur Überprüfung auf Kollinearität schreiben. Die zweite Methode berechnet die Determinante der Matrix nach der Regel von Sarrus. Die Methode isColinear verzichtet auch auf das Quadrieren der Determinanten, was auch nichts an der Dreiecksfläche hinsichtlich 0 oder nicht 0 ändert.
public static boolean isCollinear
        (Point p1, Point p2, Point p3) {
  double d[][] = null;

  d = new double[][]{
            {p1.getX(), p2.getX(), p3.getX()},
            {p1.getY(), p2.getY(), p3.getY()},
            {1, 1, 1}
          };
  if (determinant(d) != 0.0) {
    return false;
  }
  d = new double[][]{
            {p1.getY(), p2.getY(), p3.getY()},
            {p1.getZ(), p2.getZ(), p3.getZ()},
            {1, 1, 1}
          };
  if (determinant(d) != 0.0) {
    return false;
  }
  d = new double[][]{
            {p1.getZ(), p2.getZ(), p3.getZ()},
            {p1.getX(), p2.getX(), p3.getX()},
            {1, 1, 1}
          };
  if (determinant(d) != 0.0) {
    return false;
  }
  return true;
}

public static double determinant
        (double[][] matrix) {
  return
    (matrix[0][0] * matrix[1][1] * matrix[2][2] +
     matrix[0][1] * matrix[1][2] * matrix[2][0] +
     matrix[0][2] * matrix[1][0] * matrix[2][1])
        -
    (matrix[0][2] * matrix[1][1] * matrix[2][0] +
     matrix[0][1] * matrix[1][0] * matrix[2][2] +
     matrix[0][0] * matrix[1][2] * matrix[2][1]);
}

(Der Eintrag entstand um diesen Eintrag abzukürzen und auf die dritte Dimension zu erweitern.)

Donnerstag, 27. August 2009

Polynom 25ten Grades

Welch tolle Formel. Sie liefert doch tatsächlich alle Primzahlen als Ergebnis, sofern es eine positive Zahl ist.



Also wer mal eben eine Primzahl benötigt, denkt sich einfach mal 26 positive, ganze Zahlen aus und setzt sie in die Formel ein. Ist das Ergebnis positiv, so handelt es sich garantiert um eine Primzahl, wie sich beweisen lässt, aber nicht hier :D