본문 바로가기

강의자료/수학이야기

직선과 평면의 교점 구하기.


직선과 평면의 교점을 구하기 위해서 우선 직선과 평면을 정의부터 하자.

우선 직선을 정의해보자.
1. 2개의 점으로 정의.
2. 1개의 점과 1개의 방향벡터로 정의.
일반적으로 직선을 정의할 경우에는 2번이 많이 사용된다.방정식으로 표현하기 좋기 때문이다. ^^

[직선의 방정식]R(t) = P0 + t*vDir
R(t) : 직선상의 모든 점.
P0 : 직선상의 임의의 한 점.
t : P0로부터 떨어진 거리.
vDir : 직선의 방향(벡터).
즉, 위의 식에서 t값이 마이너스 무한대에서부터 플러스 무한대까지 변하게 되면 직선상의 모든 점을 표현할 수 있게 된다.
위의 식을 반직선(광선)으로 사용하고자 한다면, P0를 반직선의 시작점으로 놓으면 된다.
또한 위의 식을 선분으로 사용하고자 한다면, P0를 선분의 한 점으로 놓고 vDir벡터의 길이를 선분의 길이로 설정하면 선분의 방정식이 된다.

이번에는 평면의 방정식을 구해보자.
평면은 어떻게 정의를 내릴 수 있을까??
1. 3개의 점으로 표현.
2. 1개의 점과 1개의 노멀법선벡터(평면에 수직방향이고 길이가 1인 벡터)로 표현.
평면을 정의하기 위한 최소한의 정보는 1개의 점과 1개의 법선벡터이다.
여기에 평면상의 임의의 점을 한 개 더 추가하면 평면의 방정식을 만들 수 있다.

[평면의 방정식]N•(P0-P1) = 0             // ‘•’ 기호는 벡터의 내적을 뜻한다.
N : 평면에 수직방향인 벡터.
P0 : 평면상의 임의의 한 점.
P1 : 평면상의 임의의 한 점.
(P0-P1) : 평면위의 선분(벡터).
즉, P0과 P1이 평면위의 점이라면, (P0-P1)은 평면위의 벡터라고 표현할 수 있다.
또한 평면과 N은 수직이기 때문에 평면위의 벡터와 N벡터를 내적하면 그 결과는 0이 된다.

우리의 목적은 직선과 평면의 교점을 구하는 것이다. 이 점을 S라고 정의하자.
S는 평면과 직선의 교점이기 때문에 S는 평면상의 한 점이 된다.

즉, 이 S를 위에서 정의한 평면 방정식에서 P1이라고 가정할 수 있다.
게다가 S는 직선상의 한 점도 되므로 R(t)라고 가정할 수도 있다.

결국, P1 = R(t)를 만족하는 점이 우리가 원하는 점 S가 된다.
우선, 직선의 방정식과 평면의 방정식에서 기호가 중복되기 때문에 재정의 하도록 하자.

직선의 방정식 : R(t) = pOrigin + t*vDir
평면의 방정식 : N•(P0-P1) = 0

그렇다면, 위의 평면의 방정식에서 P1을 R(t)로 치환해보도록 하자.

N•(P0-R(t)) = 0
N•P0 - N•R(t) = 0
N•P0 - N•(pOrigin+t*vDir) = 0
N•P0 - N•pOrigin - t*(N•vDir) = 0
t*(N•vDir) = N•P0 - N•pOrigin
t = (N•P0 - N•pOrigin) / N•vDir

평면을 정의하기 위한 최소한의 정보가 1개의 점과 1개의 법선벡터라고 했으므로 N과 P0는 이미 알고 있는 값이다.
또한, 직선을 정의하기 위한 정보가 1개의 점과 1개의 방향벡터라고 했으므로 pOrigin과 vDir 역시 이미 알고 있는 값이다.
결국, 우리는 위의 식에서 t의 값을 구할 수 있게 된다.

조금 더 공식을 살펴보자.
위의 식에서 N•P0는 평면이 원점으로부터 떨어져있는 거리를 뜻하고 있다.
이 거리를 D라고 가정할 경우, 식은 다음과 같이 된다.

t = (D - N•pOrigin) / N•vDir

즉, t값을 구하기 위해서 필요한 평면의 정보는 '평면에 대한 원점과의 거리와 노멀법선벡터'로 축소가 된다.

위와 같은 과정을 거쳐서 t의 값을 구했다면, 교점 S는 직선의 방정식을 이용하여 다음과 같이 구하면 된다.

S = R(t) = pOrigin + t*vDir