Tiếp tuyến từ điểm đến đường tròn

Xem dưới dạng PDF

Gửi bài giải


Điểm: 25
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
đầu vào: stdin
Đầu ra: stdout

Tác giả:
Kiểu bài tập

Trong một bài toán quang học, một tia sáng xuất phát từ một điểm nguồn chiếu đến một thấu kính hình tròn. Tuỳ vào vị trí của điểm nguồn, sẽ có không, một hoặc hai đường thẳng đi qua điểm nguồn và tiếp xúc với thấu kính.

Hãy viết chương trình xác định số lượng tiếp tuyến từ một điểm đến một đường tròn, và nếu có, hãy tìm toạ độ các tiếp điểm.

Định dạng đầu vào

  • Dòng đầu chứa ba số nguyên \(x_c, y_c, r\) (\(-10^4 \le x_c, y_c \le 10^4\), \(1 \le r \le 10^4\)) là tâm và bán kính đường tròn.
  • Dòng thứ hai chứa hai số nguyên \(x_p, y_p\) (\(-10^4 \le x_p, y_p \le 10^4\)) là toạ độ điểm nguồn.

Định dạng đầu ra

  • Dòng đầu in số lượng tiếp tuyến \(k\) (\(0\), \(1\) hoặc \(2\)).
  • Nếu \(k = 1\): dòng thứ hai in toạ độ \(x\) \(y\) của tiếp điểm.
  • Nếu \(k = 2\): hai dòng tiếp theo, mỗi dòng in toạ độ \(x\) \(y\) của một tiếp điểm (theo thứ tự bất kỳ).
  • Kết quả in ra số thực làm tròn đến sáu chữ số thập phân.

Ví dụ

Input:

0 0 1
3 0

Output:

2
0.333333 0.942809
0.333333 -0.942809

Ràng buộc

  • 30% số điểm: \(|x_c|,|y_c|,|x_p|,|y_p|, r \le 10\).
  • 30% số điểm tiếp theo: \(|x_c|,|y_c|,|x_p|,|y_p|, r \le 100\).
  • 40% số điểm còn lại: không có ràng buộc gì thêm.

Nhận xét

Không có ý kiến tại thời điểm này.