2001년 가을학기 문제해결기법 - 문제 5

두 선분간의 거리

x,y-평면에 두 선분이 주어져 있을 때, 두 선분 사이의 거리를 계산하는 프로그램을 작성하시오.

1. 선분을 나타내기 위해서 선분의 두 끝점의 x,y-좌표가 주어지면 충분하다. 물론 두 끝점은 서로 다르다고 가정한다.

2. 이 문제에서 다루는 선분은 끝점을 포함하는 닫힌 선분이라고 가정한다.

3. 두 선분 A, B 사이의 거리는 선분 A상의 점과 선분 B상의 점 사이의 최소 거리를 말한다. 두 선분이 교차하는 경우는 물론 거리가 0이 된다.

4. 두 점 사이의 거리는 유클리드 거리를 말한다. 즉, 두 점을 잇는 선분의 길이이다.

5. 실수 계산으로 인한 오차를 인정하지만, 가급적 오차를 줄이도록 노력해야 한다.

프로그램명은 segment.c(segment.cpp)라고 하고 실행 파일명은 segment.exe로 한다. 프로그램의 실행 시간은 2초를 초과할 수 없다.

입력 형식

입력 파일의 이름은 INPUT.TXT이다. 첫째 줄과 둘째 줄에 각각 하나의 선분을 나타내는 끝점의 좌표가 주어진다. 선분의 끝점의 좌표가 각각 ([eqn: x_1],[eqn: y_1]), ([eqn: x_2],[eqn: y_2])인 경우 네 실수 [eqn: x_1], [eqn: y_1], [eqn: x_2], [eqn: y_2]가 차례로 주어지며, 이들 사이에는 콤마가 없고 공백이 하나 혹은 그 이상 있다.

출력 형식

출력 파일의 이름은 OUTPUT.TXT이다. 첫째 줄에 주어진 두 선분 사이의 거리를 출력한다.

입력과 출력의 예 (1)

INPUT.TXT

1.0 1.0 3.0 1.0

2.0 2.0 2.0 0.0

OUTPUT.TXT

0

입력과 출력의 예 (2)

INPUT.TXT

0.0 0.0 1.0 1.0

1.0 3.0 3.0 1.0

OUTPUT.TXT

1.41421356