Cho 5 điểm khác biệt trên mặt phẳng hai chiều, xác định loại mặt cắt hình nón được tạo bởi các điểm. Kết quả sẽ là một trong những circle
, hyperbola
, ellipse
, hoặc parabola
.
Quy tắc
- Các điểm sẽ ở vị trí tuyến tính chung, có nghĩa là không có ba điểm nào thẳng hàng, và do đó hình nón đi qua chúng sẽ là duy nhất.
- Các tọa độ của 5 điểm sẽ là các số thập phân trong khoảng từ -10 đến 10, bao gồm.
- Độ chính xác cho các giá trị thập phân / float phải là độ chính xác của kiểu float / thập phân gốc của ngôn ngữ của bạn. Nếu loại ngôn ngữ / dữ liệu của bạn là độ chính xác tùy ý, bạn có thể sử dụng 12 chữ số sau dấu thập phân làm độ chính xác yêu cầu tối đa, làm tròn về 0 (ví dụ:
1.0000000000005 == 1.000000000000
). - Viết hoa của đầu ra không quan trọng.
- Xuất ra
ellipse
khi phần hình nón thực sự là một vòng tròn không được phép. Tất cả các vòng tròn là hình elip, nhưng bạn phải xuất ra một hình cụ thể nhất.
Về điểm không chính xác và độ chính xác:
Tôi đang cố gắng làm cho điều này trở nên đơn giản nhất có thể, để các vấn đề với sự thiếu chính xác của dấu phẩy động không được giải quyết. Mục tiêu là, nếu kiểu dữ liệu là "giá trị chính xác vô hạn kỳ diệu" thay vì float / double, thì mọi thứ sẽ hoạt động hoàn hảo. Nhưng, vì "giá trị chính xác vô hạn kỳ diệu" không tồn tại, bạn viết mã giả định rằng các giá trị của bạn là độ chính xác vô hạn và bất kỳ vấn đề nào phát sinh do sự thiếu chính xác của dấu phẩy động là các tính năng, không phải lỗi.
Các trường hợp thử nghiệm
(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
dường như yêu cầu kiểm tra đẳng thức phao để phân biệt với hình elip rất tròn. Độ chính xác nào chúng ta nên giả định ở đây?