다각형 자르기
시간 제한1초메모리 제한128 MB
주어진 단순 다각형과 여러 직선 각각에 대해, 직선과 다각형의 교집합 전체 길이를 구한다.
문제
평면 위에 단순 다각형(볼록하지 않을 수도 있다) 하나와 직선 하나가 주어진다. 이 직선을 따라 다각형을 자르면 여러 개의 작은 다각형으로 나뉠 수 있다. 자른 길이, 즉 직선과 다각형의 교집합을 이루는 선분들의 전체 길이를 구하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 음이 아닌 정수 과 이 주어지며 (), 각각 다각형의 꼭짓점 개수와 고려할 절단 직선의 개수를 뜻한다. 이어지는 개의 줄에는 각 꼭짓점의 , 좌표가 시계 방향 또는 반시계 방향 순서로 주어진다. 그다음 개의 줄에는 각각 네 개의 수 가 주어지며, 이는 절단 직선을 정의하는 서로 다른 두 점의 좌표이다. 다각형의 어떤 꼭짓점이 절단 직선으로부터 10e-8보다 가까이 있으면, 그 꼭짓점은 직선 위에 있는 것으로 간주한다. 입력은 과 이 모두 인 줄로 끝나며, 이 줄은 처리하지 않는다.
출력
각 절단 직선에 대해, 직선과 다각형의 교집합을 이루는 선분들의 전체 길이를 소수점 아래 정확히 셋째 자리까지 반올림하여 한 줄에 하나씩 출력한다. 다각형의 둘레(경계)는 다각형에 포함되는 것으로 본다.
힌트
다각형의 둘레가 다각형에 포함되므로, 절단 직선과 완전히 겹치는 변은 그 변의 길이만큼 교집합에 더해진다. 반면 직선이 다각형과 단 하나의 꼭짓점에서만 만나는 경우, 그 교집합의 길이는 이다.