รับ 5 คะแนนที่แตกต่างบนระนาบสองมิติ, กำหนดประเภทของส่วนรูปกรวยที่เกิดขึ้นจากคะแนน เอาท์พุทจะเป็นหนึ่งในcircle
, hyperbola
, หรือellipse
parabola
กฎระเบียบ
- คะแนนจะอยู่ในตำแหน่งเชิงเส้นทั่วไปซึ่งหมายความว่าไม่มีจุดสามจุดเป็นเส้นตรงและทำให้รูปกรวยที่ผ่านจุดเหล่านั้นจะไม่ซ้ำกัน
- พิกัดของ 5 คะแนนจะเป็นตัวเลขทศนิยมระหว่าง -10 ถึง 10 รวม
- ความแม่นยำสำหรับค่าทศนิยม / ทศนิยมควรเป็นความแม่นยำของประเภททศนิยม / ทศนิยมของภาษาของคุณ หากภาษา / ชนิดข้อมูลของคุณมีความแม่นยำตามอำเภอใจคุณอาจใช้ตัวเลข 12 หลักหลังจุดทศนิยมเป็นความแม่นยำสูงสุดที่ต้องการโดยปัดเศษเป็นศูนย์ (เช่น
1.0000000000005 == 1.000000000000
) - การใช้ประโยชน์จากตัวพิมพ์ใหญ่ของผลผลิตไม่สำคัญ
- การส่งออก
ellipse
เมื่อส่วนที่มีรูปกรวยเป็นวงกลมไม่ได้รับอนุญาต แวดวงทั้งหมดเป็นวงรี แต่คุณต้องส่งออกวงกลมที่เฉพาะเจาะจงมากที่สุด
เกี่ยวกับความไม่ถูกต้องของจุดลอยตัวและความแม่นยำ:
ฉันกำลังพยายามทำให้เรื่องนี้ง่ายที่สุดเท่าที่จะทำได้เพื่อให้ปัญหาเกี่ยวกับความไม่ถูกต้องของจุดลอยตัวไม่เข้าทาง เป้าหมายคือถ้าประเภทข้อมูลเป็น "ค่าความแม่นยำไม่มีที่สิ้นสุดวิเศษ" แทนการลอย / สองครั้งทุกอย่างจะทำงานได้อย่างสมบูรณ์แบบ แต่เนื่องจากไม่มี "ค่าความแม่นยำอนันต์มหัศจรรย์" คุณเขียนโค้ดที่ถือว่าค่าของคุณนั้นมีความแม่นยำไม่สิ้นสุดและปัญหาใด ๆ ที่เกิดขึ้นเนื่องจากความไม่ถูกต้องของจุดลอยตัวคือคุณสมบัติไม่ใช่ข้อบกพร่อง
กรณีทดสอบ
(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
โฟลตเอาต์พุตดูเหมือนจะต้องมีการตรวจสอบความเท่าเทียมกันแบบลอยเพื่อแยกความแตกต่างจากวงรีที่กลมมาก เราควรคาดเดาสิ่งที่แม่นยำที่นี่