İki boyutlu bir düzlemde 5 ayrı nokta verildiğinde, noktalardan oluşan konik kesit tipini belirleyin. Çıktı biri olacaktır circle, hyperbola, ellipse, veya parabola.
kurallar
- Noktalar genel doğrusal pozisyonda olacaktır, yani üç noktanın birbirine yakın olmadığı ve bu nedenle bunlardan geçen konik benzersiz olacaktır.
- 5 noktanın koordinatları, -10 ile 10 arasındaki ondalık sayılar dahil olacaktır.
- Ondalık / kayan değerlerin kesinliği, dilinizin yerel kayan / ondalık türünün kesinliği olmalıdır. Diliniz / veri türünüz rasgele kesinlikteyse, ondalık noktadan sonra gereken en yüksek kesinlik olarak 12 basamak kullanabilirsiniz ve sıfıra doğru yuvarlayın (örn.
1.0000000000005 == 1.000000000000). - Çıktıdan büyük harf kullanımı önemli değildir.
- Çıktısı
ellipsekonik bölüm aslında bir daire izin verilmez olduğunda. Tüm daireler elips şeklindedir, ancak en belirgin olanı çıkarmanız gerekir.
Kayan nokta yanlışlıklarında ve hassasiyetinde:
Bunu olabildiğince basit hale getirmeye çalışıyorum, böylece kayan nokta yanlışlıkları ile ilgili sorunlar yoluna girmiyor. Amaç, eğer veri türü float / double yerine "sihirli sonsuz kesinlik değeri" olsaydı, o zaman her şey mükemmel çalışırdı. Ancak, "sihirli sonsuz kesinlik değeri" bulunmadığından, değerlerinizin sonsuz kesinlik olduğunu ve kayan nokta yanlışlıkları sonucu ortaya çıkan sorunların hata değil, özellikler olduğunu varsaydığınız bir kod yazarsınız.
Test Durumları
(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Şamandıralar için çıktılar, çok yuvarlak bir elipsten ayırmak için şamandıra eşitliğini kontrol etmeyi gerektirir. Burada ne gibi bir hassasiyet varsaymalıyız?