평면과 선의 교차점 구하기

하나의 평면에 대해서 2가지의 평면공식이 도출되는데, 이 2가지 평면의 공식에 대해서.. 선과 평면에 대한 교차점을 구하는 방법에 대해서 논의해 보겠습니다. 이 자료는 1991년에 작성된 Paul Bourke(http://local.wasp.uwa.edu.au)님의 글을 좀더 알기 쉽게 풀어 쓴 글입니다.
사용자 삽입 이미지방법 1.

점 P는 평면 위의 임이의 점이고, N은 법선벡터이며 P3는 이미 알고 있는 평면상의 점이라고 하면 평면의 공식은 우리가 고등학교때 배운 평면의 방정식의 형태인, 다음처럼 기술됩니다.

사용자 삽입 이미지
평면을 수학적으로 기술했으니, 이제는 선에 대한 공식을 알아볼 차례입니다. 이제 앞에서 언급한 점 P를 평면과 선과의 교차점이라고 하면, 점 P는 선에 대한 점입니다. 그리고 선이 지나는 이미 알고 있는 2개의 점을 각각 P1, P2라고 하면 선에 대한 공식은 수학적으로 다음과 같습니다.

사용자 삽입 이미지
위에서 u는 선에 대한 기울기 값이 되겠지요. 이제.. 평면의 공식에서 P에 선의 공식을 대입할 수 있는 형태입니다. 대입해 보면 아래와 같습니다.

사용자 삽입 이미지
위의 식을 u에 대해서 전개해 보면 아래와 같은 공식이 됩니다.

사용자 삽입 이미지

이제 u값을 구했으니.. 이 u값을 선에 대한 공식에 대입하여 교차점 P를 구할 수 있습니다. 다음은 주의할 점입니다.

  • 만약 u에 대한 식에서 분모가 0이면, 주어진 선과 평면의 법선은 수직이라는 의미입니다. 즉, 이말은 평면과 선은 서로 만나지 않는다는 의미입니다.
  • 교점 P가 P1과 P2 사이에 있는지 검사해야한다면, u값이 0~1사이의 값인지 확인해 보면 됩니다.

방법 2.

이제 평면에 대한 공식으로, 고등학교때 배운 또 다른 형태는 다음과 같습니다.

사용자 삽입 이미지
(x,y,z)는 평면상의 점이고 (A,B,C)는 평면에 대한 법선벡터이며 D는 이 법선벡터의 길이값입니다. 이 형태의 평면방정식은 임이의 점에 대해서 위의 공식에 대입하여 그 값이 양수인경우 평면을 경계로 법선벡터가 향하는 부분에 존재하는 것이고, 음수인경우는 그 반대방향에 존재하는 것을 간단히 판단할 수 있습니다.

P1(x1,y1,z1)과 P2(x2,y2,z2)를 지나는 선에 대한 공식을 방법1에서의 선에 대한 공식… 다시 언급해 보면 아래와 같습니다.

사용자 삽입 이미지
위의 선 공식을 방법2에서의 평면의 공식에 대입해 보면 다음과 같은 형태로 전개됩니다.

사용자 삽입 이미지
위의 식을 u에 대해서 정리해 보면…

사용자 삽입 이미지
이제 u를 구했으니, 방법1과 마찬가지로 교점을 구할 수 있습니다. 이 방법에 대해 주의할 점은 방법 1과 동일합니다.

선과 점 사이의 최소 거리 구하기

원문은 http://local.wasp.uwa.edu.au/~pbourke/geometry/pointline/ 입니다.

지금 진행하고 있는 프로젝트에서 필요한 알고리즘인데, 어디 이미 구현된 소스 코드 없나… 찾다가 발견한것입니다. 찾고보니, 무척 오래전에 봤던 글이네요. 그런데 그때는 소스 코드를 제공하지 않았는데… 여하튼, 다시 복습하는 겸해서 번역해 올립니다. 예전과 다르게 그림도 깔끔해서 그 그림을 그대로 올리겠습니다. 물론 변역이기는 하지만, 나름대로 내용을 보충해서 올렸습니다. 내용 시작합니다~

P1(x1, y1)과 P2(x2, y2)를 지나는 선분의 공식은 아래와 같다.

P = P1 + u(P2P1)

점 P3(x3, y3)는 P1과 P2를 지나는 선분에 인접한 점이다. P3를 선분까지 수직으로 연장한 길이가 바로 우리가 구하고자 하는 값, 즉 최소 거리이다. 수직으로 연장해서 만나는 점을 P라고 하자. 즉, P는 선분 상의 점이 되겠다. 그렇다면, 벡터P3->P와 벡터 P2->P1를 정의할 수 있을 것이고, 이 두 벡터의 내적(Dot Product)는 0이다.

(P3P) dot (P2 P1) = 0

위의 식의 P에 처음에 언급한 선분의 식(P에 대한)을 대입해보면…

[P3P1 – u(P2P1)] dot (P2P1) = 0

위의 식을 u에 대해서 풀어보면,

이 u 값을 다시 처음의 선분의 방정식(P1과 P2를 지나는)에 대입해 교점P에 대한 x, y에 대해 풀어보면…

x = x1 + u(x2x1)
y = y2 + u(y2y1)

그렇다면… 이렇게 구한 P와 P3의 거리가 바로 우리가 구하고자 했던 최소 거리값이 된다.