Bestimmen Sie bei 5 verschiedenen Punkten auf einer zweidimensionalen Ebene die Art des Kegelschnitts, der durch die Punkte gebildet wird. Der Ausgang wird einer der folgenden sein circle, hyperbola, ellipse, oder parabola.
Regeln
- Die Punkte befinden sich im Allgemeinen in einer linearen Position, was bedeutet, dass keine drei Punkte kollinear sind und daher der durch sie verlaufende Kegel eindeutig ist.
- Die Koordinaten der 5 Punkte sind Dezimalzahlen zwischen -10 und 10 einschließlich.
- Die Genauigkeit für die Dezimal- / Gleitkommawerte sollte der Genauigkeit des systemeigenen Gleitkomma- / Dezimaltyps Ihrer Sprache entsprechen. Wenn Ihre Sprache / Ihr Datentyp eine willkürliche Genauigkeit hat, können Sie 12 Nachkommastellen als die maximal erforderliche Genauigkeit verwenden, die auf Null gerundet wird (z
1.0000000000005 == 1.000000000000. B. ). - Die Kapitalisierung der Ausgabe spielt keine Rolle.
- Das Ausgeben,
ellipsewenn der Kegelschnitt tatsächlich ein Kreis ist, ist nicht zulässig. Alle Kreise sind Ellipsen, Sie müssen jedoch die spezifischste ausgeben.
Bei Gleitkommaungenauigkeiten und -genauigkeiten:
Ich versuche, dies so einfach wie möglich zu gestalten, damit Probleme mit Gleitkommaungenauigkeiten nicht im Wege stehen. Das Ziel ist, wenn der Datentyp "magical infinite precision value" anstelle von float / double wäre, würde alles perfekt funktionieren. Da es jedoch keinen "magischen unendlichen Genauigkeitswert" gibt, schreiben Sie Code, der davon ausgeht, dass Ihre Werte unendliche Genauigkeit haben, und alle Probleme, die aufgrund von Gleitkommaungenauigkeiten auftreten, sind Funktionen, keine Fehler.
Testfälle
(0, 0), (1, 5), (2, 3), (4, 8), (9, 2) => hyperbola
(1.2, 5.3), (4.1, 5.6), (9.1, 2.5), (0, 1), (4.2, 0) => ellipse
(5, 0), (4, 3), (3, 4), (0, 5), (0, -5) => circle
(1, 0), (0, 1), (2, 1), (3, 4), (4, 9) => parabola
circlescheint es für Ausgaben wie erforderlich zu sein, die Gleichheit der Floats zu überprüfen, um sie von einer sehr runden Ellipse zu unterscheiden. Welche Präzision sollen wir hier annehmen?