Daniel Thoma: Punkte gegen den Uhrzeigersinn sortieren

Beitrag lesen

Ok, da sind noch einige Fehler drin. (Ein Flüchtigkeitsfehler, ein Sonderfall und ein konzeptioneller).

Baue aus A und B eine Geradengleichung der Form:
ax+c-y=0
Für Punkte "rechts" gilt dann ax+c-y>0 für die "links" ax+c-y<0

Dabei ist es natürlich entscheidend, welche Reihenfolge A und B haben, da davon abhängt, was "links" ist. Das gilt nur wenn A.X < B.X sonst ist es gerade umgekeht.

Das Programm sieht dann also so aus:
if (A.X == B.X) {
  // Sonderfall
  if (A.X == C.X) {
    return null; // kein Dreieck
  }
  (B, C) = (C, B);
}
if (A.X > B.X) {
  (A, B) = (B, A);
}
f(x,y) = ((B.Y-A.Y)/(B.X-A.X))*(x-A.X)+A.Y-y
if (f(C.X, C.Y) > 0) {
  return [A, C, B];
} else if (f(C.X, C.Y) < 0) {
  return [A, B, C];
} else {
  return null; // kein Dreieck.
}

Das sollte jetzt zu mindest konzeptionell stimmen. Solche geometrischen Probleme werden schnell eklig, selbst wenn die Idee wie hier sehr einfach ist.

Grüße

Daniel