콘텐츠로 이동

선분을 지나는 직선의 방정식 구하기

과제는 다음과 같습니다. 선분의 양 끝점 좌표가 주어질 때, 이 선분을 지나는 직선을 구성하십시오.

선분은 퇴화하지 않았다고, 즉 길이가 0보다 크다고 가정합니다(그렇지 않으면 당연히 그 선분을 지나는 서로 다른 직선이 무한히 많습니다).

2차원의 경우

주어진 선분을 $PQ$라고 합시다. 즉, 양 끝점의 좌표 $P_x , P_y , Q_x , Q_y$가 알려져 있습니다.

이 선분을 지나는 평면 위의 직선의 방정식을 구성해야 합니다. 즉, 다음 직선의 방정식에서 계수 $A , B , C$를 구해야 합니다:

$$A x + B y + C = 0.$$

구하려는 삼중항 $(A, B, C)$에 대해 주어진 선분을 나타내는 해가 무한히 많다는 점에 유의하십시오. 세 계수 모두에 0이 아닌 임의의 수를 곱해도 같은 직선을 얻습니다. 따라서 우리가 할 일은 이러한 삼중항 중 하나를 찾는 것입니다.

다음 계수 집합이 조건을 만족한다는 것은 (이 식들과 점 $P$, $Q$의 좌표를 직선의 방정식에 대입해 보면) 쉽게 확인할 수 있습니다:

$$\begin{align} A &= P_y - Q_y, \\ B &= Q_x - P_x, \\ C &= - A P_x - B P_y. \end{align}$$

정수의 경우

이 직선 구성 방법의 중요한 장점은 양 끝점의 좌표가 정수이면 얻어지는 계수도 정수라는 점입니다. 경우에 따라서는 이 덕분에 실수를 전혀 사용하지 않고 기하 연산을 수행할 수 있습니다.

그러나 작은 단점이 있습니다. 같은 직선에 대해 서로 다른 계수 삼중항이 얻어질 수 있습니다. 계수를 정수로 유지하면서 이를 피하려면 다음과 같이 계수를 정규화하십시오. 수 $| A | , | B | , | C |$의 최대공약수를 구하여 세 계수를 모두 그 값으로 나눈 다음, 부호를 정규화하십시오. $A <0$이거나 $A = 0, B <0$이면 세 계수 모두에 $-1$을 곱합니다. 그 결과 같은 직선에서는 같은 계수 삼중항이 얻어지므로, 두 직선이 같은지 쉽게 확인할 수 있습니다.

실수의 경우

실수를 다룰 때는 항상 오차에 유의해야 합니다.

계수 $A$와 $B$는 원래 좌표와 같은 크기의 차수를 가지며, 계수 $C$는 좌표의 제곱 정도의 차수를 가집니다. 이는 이미 상당히 큰 수일 수 있으며, 예를 들어 직선의 교점을 구할 때에는 더욱 커지므로, 끝점의 좌표가 $10^3$ 정도일 때부터 이미 큰 반올림 오차가 생길 수 있습니다.

따라서 실수를 다룰 때는 이른바 정규화를 하는 것이 바람직하며, 방법은 간단합니다. 즉, 계수가 $A ^ 2 + B ^ 2 = 1$을 만족하도록 만드는 것입니다. 이를 위해 수 $Z$를 계산합니다:

$$Z = \sqrt{A ^ 2 + B ^ 2},$$

그리고 세 계수 $A , B , C$를 모두 그 값으로 나눕니다.

이렇게 하면 계수 $A$와 $B$의 차수는 입력 좌표의 차수에 의존하지 않게 되고, 계수 $C$는 입력 좌표와 같은 차수를 가지게 됩니다. 실제로 이렇게 하면 계산의 정확도가 크게 향상됩니다.

마지막으로 직선의 비교에 대해 언급하겠습니다. 실제로 이러한 정규화를 거치면 같은 직선에 대해 얻을 수 있는 계수의 세 쌍은 두 가지뿐이며, 둘은 $-1$을 곱하는 곱셈만큼만 다릅니다. 따라서 부호를 고려한 추가 정규화를 하면($A < -\varepsilon$이거나 $| A | < \varepsilon$, $B <- \varepsilon$이면 $-1$을 곱합니다), 결과로 얻는 계수는 유일해집니다.

3차원 및 다차원의 경우

3차원의 경우부터 이미 직선을 나타내는 간단한 방정식이 없습니다(두 평면의 교선, 즉 두 방정식으로 이루어진 연립방정식으로 정의할 수는 있지만 불편한 방법입니다).

따라서 3차원 및 다차원의 경우에는 직선을 매개변수로 정의하는 방법, 즉 점 $p$와 벡터 $v$로 정의하는 방법을 사용해야 합니다:

$$p + v t, ~~~ t \in \mathbb{R}.$$

즉, 직선은 점 $p$에 임의의 계수를 곱한 벡터 $v$를 더하여 얻을 수 있는 모든 점의 집합입니다.

선분의 양 끝점 좌표로부터 매개변수 형태의 직선을 구성하는 것은 간단합니다. 선분의 한 끝점을 점 $p$로 잡고, 첫 번째 끝점에서 두 번째 끝점으로 향하는 벡터를 벡터 $v$로 잡으면 됩니다.