====== 점과 원 ====== ===== 풀이 ===== * 네 점 P,Q,R,S 중에서 우선 P,Q,R 만 생각하자. * 세 점 P,Q,R에 대해서 세 점을 지나는 원을 구하면, 원과 세 점과의 거리는 0으로 같다 * 원의 중심 O 을 그대로 둔 채 반지름만 바꾸면, 각 점과 원과의 거리는 같게 유지된다. * 그러므로, O를 중심으로 하는 원의 반지름을 조절해서 P와의 거리가 S와의 거리와 같게 되도록 하면 된다. 그것은 원이 P와 S의 중점을 지나가도록 하게 하면 찾을수 있다. 즉, 반지름을 (|OP|+|OS|)/2 로 잡으면 된다. * P,Q,R을 지나는 원의 중심은 [[ps:tutorial:원#삼각형의_외접원_circumscribed_circle|삼각형의 외접원]]에서 설명한대로 찾을 수 있다. * 만약 P,Q,R이 한 직선위에 있는 경우에는 원이 만들어지지 않으므로, 다른 점 세개를 가지고 같은 방법을 시도하면 된다. ===== 코드 ===== """Solution code for "BOJ 32863. 점과 원". - Problem link: https://www.acmicpc.net/problem/32863 - Solution link: http://www.teferi.net/ps/problems/boj/32863 Tags: [geometry] """ import math from teflib import geometry def main(): P, Q, R, S = [[int(x) for x in input().split()] for _ in range(4)] try: *O, r_sq = geometry.circumcircle_of_triangle(P, Q, R) except geometry.DegeneracyError: S, R = R, S *O, r_sq = geometry.circumcircle_of_triangle(P, Q, R) answer_r = (math.sqrt(r_sq) + math.dist(O, S)) / 2 print(*O, answer_r) if __name__ == '__main__': main() * Dependency: [[:ps:teflib:geometry#circumcircle_of_triangle|teflib.geometry.circumcircle_of_triangle]] {{tag>BOJ ps:problems:boj:골드_3}}