Dados 5 puntos distintos en un plano bidimensional, determine el tipo de sección cónica formada por los puntos. La salida será uno de circle
, hyperbola
, ellipse
, o parabola
.
Reglas
- Los puntos estarán en posición lineal general, lo que significa que no hay tres puntos colineales y, por lo tanto, la cónica que los atraviesa será única.
- Las coordenadas de los 5 puntos serán números decimales entre -10 y 10, inclusive.
- La precisión de los valores decimales / flotantes debe ser la precisión del tipo flotante / decimal nativo de su idioma. Si su idioma / tipo de datos es de precisión arbitraria, puede usar 12 dígitos después del punto decimal como la precisión máxima requerida, redondeando hacia cero (por ejemplo
1.0000000000005 == 1.000000000000
). - La capitalización de la producción no importa.
- La salida
ellipse
cuando la sección cónica es en realidad un círculo no está permitida. Todos los círculos son elipses, pero debe generar el más específico.
En imprecisiones y precisión de coma flotante:
Estoy tratando de hacer esto lo más simple posible, para que los problemas con las imprecisiones de coma flotante no se interpongan en el camino. El objetivo es, si el tipo de datos fuera "valor de precisión infinita mágico" en lugar de flotante / doble, entonces todo funcionaría perfectamente. Pero, dado que el "valor de precisión infinita mágico" no existe, usted escribe un código que asume que sus valores son de precisión infinita, y cualquier problema que surja como resultado de imprecisiones de coma flotante son características, no errores.
Casos de prueba
(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
circle
parecen requerir la verificación de la igualdad de flotante para distinguirla de una elipse muy redonda. ¿Qué precisión debemos asumir aquí?