Biorąc pod uwagę 5 różnych punktów na płaszczyźnie dwuwymiarowej, określ typ przekroju stożkowego utworzonego przez punkty. Wyjście powinno być jednym z circle, hyperbola, ellipse, lub parabola.
Zasady
- Punkty będą w ogólnej pozycji liniowej, co oznacza, że żadne trzy punkty nie są współliniowe, a zatem przechodzący przez nie stożek będzie unikalny.
- Współrzędne 5 punktów będą liczbami dziesiętnymi od -10 do 10 włącznie.
- Precyzja wartości dziesiętnych / zmiennoprzecinkowych powinna być dokładnością rodzimego typu zmiennoprzecinkowego / dziesiętnego języka. Jeśli Twój język / typ danych to dowolna precyzja, możesz użyć 12 cyfr po przecinku jako maksymalnej wymaganej precyzji, zaokrąglając w kierunku zera (np
1.0000000000005 == 1.000000000000.). - Kapitalizacja wyniku nie ma znaczenia.
- Wyprowadzanie,
ellipsegdy sekcja stożkowa jest w rzeczywistości okręgiem, jest niedozwolone. Wszystkie koła są elipsami, ale musisz wyprowadzić najbardziej konkretny.
W przypadku niedokładności i precyzji zmiennoprzecinkowej:
Staram się, aby było to tak proste, jak to możliwe, aby problemy z niedokładnościami zmiennoprzecinkowymi nie przeszkadzały. Celem jest, gdyby typem danych była „magiczna nieskończona wartość precyzji” zamiast liczby zmiennoprzecinkowej / podwójnej, wówczas wszystko działałoby idealnie. Ale ponieważ „magiczna nieskończona wartość precyzji” nie istnieje, piszesz kod, który zakłada, że twoje wartości są nieskończoną precyzją, a wszelkie problemy, które pojawiają się w wyniku niedokładności liczb zmiennoprzecinkowych, są cechami, a nie błędami.
Przypadki testowe
(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
circlezmiennoprzecinkowych wyjścia wydają się wymagać sprawdzania równości liczb zmiennoprzecinkowych w celu odróżnienia od bardzo okrągłej elipsy. Jaką precyzję powinniśmy tutaj przyjąć?