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