CS/멀티미디어응용수학

[멀티미디어응용수학] 4. 직선과 평면, 점 사이의 최단 거리

2023. 10. 14. 15:47
목차
  1. 직선과 점 사이 최단 거리
  2. 평면과 점 사이 최단 거리
  3. 직선과 직선 사이 최단 거리
반응형

지난 글까지 직선과 평면의 방정식을 내적과 외적을 이용해 구하는 과정을 정리하였다.

이번 글에서는 직선과 점 사이 최단거리, 직선과 직선 사이 최단거리, 점과 평면사이 최단거리를 구하는 방법을 정리한다.

 

(직선과 평면의 경우, 최단거리가 존재하려면 반드시 직선과 평면이 평행해야하는데, 그 경우 직선 위 임의 점에서 평면과 최단거리를 구하면 되기 때문에 점과 평면사이 최단거리를 구하는 것과 같다.)

 

직선과 점 사이 최단 거리

우선 2차원에서 직선과 점 사이 최단 거리를 구하는 방법을 생각해보자

직선 밖의 점과 직선 사이의 최단 거리는 그 점에서 직선으로 수선의 발을 내렸을 때, 수선의 발과 해당 점 사이의 거리이다.

 

직선의 방정식을 내적을 이용하여 표현하면, 직선의 법선벡터를 쉽게 구할 수 있다.

이를 이용하면 직선 밖의 점을 지나고 직선과 수직인 새로운 직선의 방정식을 구할 수 있으므로,

이 새로운 직선의 방정식과 기존의 직선의 방정식 사이 교점을 구해 그 두 점 사이 길이를 구하면 최단 거리를 알 수 있다.

 

다른 방식도 있다.

직선의 방정식을 내적을 이용해 표현하였을 때, 법선벡터의 크기가 1 이라면 (a, b) · (x, y) = d 에서 d는 원점과 직선 사이 최단거리가 된다.

따라서 거리를 찾으려는 점을 원점으로 하는 새로운 좌표계로 직선을 새롭게 표현한 후, d 값을 확인하면 된다.

만약 거리를 찾으려는 직선 밖의 점이 (p, q) 라면, 직선을 (-p, -q) 만큼 평행이동 시킨 직선의 방정식의 d 값을 확인하면 된다.

 

한번 y = -x + 1 과 원점 사이 최단 거리를 구해보자.

 

y = -x + 1

y + x = 1

(1, 1) · (x, y) = 1

 

법선벡터를 normalize 하면,

(1/√2, 1/√2) · (x, y) = 1/√2

 

따라서 원점과 직선 사이 최단 거리는 1/√2 이다

 

이번엔 같은 직선과 (2, 2) 사이 최단 거리를 구해보자.

그래프를 그려보면 결과값으로 3√2 / 2 가 나옴을 알 수 있다.

 

첫 번째 방식으로 최단 거리를 구해보면, (1, 1) 을 방향벡터로 하고, (2, 2) 를 지나는 직선의 방정식을 구하면 된다.

 

전에 두 직선의 교점을 구하는 방법을 매개변수로 표현된 직선에 대해 배웠으므로, 직선의 방정식을 parametric 방식으로 구해보면,

 

l(t) = (1, 1) * t + (2, 2)

= (t + 2, t + 2)

 

와 같이 된다.

이제 y = -x + 1 도 parametric 방식으로 구해보자.

법선벡터가 (1, 1) 이므로, 방향벡터는 (1, -1) 이고, (0, 1) 을 지나므로 이를 이용하여, parametric 방식으로 직선의 방정식을 세우면

 

l(s) = (1, -1) * s + (0, 1)

= (s, -s + 1)

 

이제 아래와 같은 방정식을 풀자.

 

t + 2 = s

t + 2 = -s + 1

 

두 식을 빼면

0 = 2s - 1

s = 1/2

 

이를 l(s) 에 대입하면

(1/2, 1/2) 이 수선의 발의 좌표이다.

 

이제 이 점과 (2,2) 사이의 거리를 구하면

 

|| (2 - 1/2, 2 - 1/2) || = 3√2 / 2

 

따라서 우리가 알고 있는 최단거리와 동일하다.


두 번째 방식으로 최단 거리를 구해보면, 주어진 직선을 x 축으로 -2, y 축으로 -2 만큼 평행이동 시켜보자.

 

y + 2 = - (x + 2) + 1

x + y = -3

 

이 직선을 내적으로 표현하면

(1, 1) · (x, y) = -3

 

normalize 하면,

 

(1/√2, 1/√2) · (x, y) = -3/√2

(1/√2, 1/√2) · (x, y) = -3√2 / 2

 

최단 거리는 |  -3√2 / 2  | = 3√2 / 2 으로 우리가 알고 있는 것과 동일하다.

 

직선과 점 사이 최단 거리는 파워포인트 같은 프로그램에서 선을 생성했을 때, 선의 선택되는 범위를 구하는데 사용된다.


평면과 점 사이 최단 거리

다음으로 평면과 점 사이 최단 거리를 구해보자.

직선과 직선 사이 최단 거리를 구하기 전에 평면과 점 사이 최단 거리를 먼저 구하는 이유는, 직선과 직선 사이 최단 거리를 구하는 과정에 평면과 점 사이 최단 거리를 구하는 과정이 포함되기 때문이다.

 

우선 평면과 원점 사이 최단 거리를 구해보자.

사실 이는 직선에서의 경우를 생각해보면 쉽게 알 수 있다.

 

평면의 방정식을 내적으로 표현하여

 

(a, b, c) · (x, y, z) = d

 

와 같은 형태가 되었다고 해보자.

이 때 (a ,b, c) 가 normalize 되어있다면, 원점에서 평면까지 최단 거리는 d 이다. 

 

즉, 이를 일반화 하면 아래와 같다.


이번엔 임의 점에서 평면까지 최단 거리를 구해보자.

이 경우도 위의 직선에서 했던 것과 동일하다.

아까 직선과 임의 점 사이 최단 거리를 구할 때, 제일 간단한 방법이었던 평행이동을 이용한다.

 

평면 밖의 점 C = (Xc, Yc, Zc) 가 있다고 해보자.

이 점과 평면  n · x = d 사이 최단 거리를 구해보자

 

이 경우 평면을 (-Xc, -Yc, -Zc) 만큼 (즉, -C 만큼) 평행 이동시키는 것이므로 평행 이동된 평면의 방정식은 아래와 같다.

 

n · (x + C) = d

 

이제 이 평면에 대해 원점에서 최단 거리를 구하기 위해 법선백터를 양변에 normalize 해주면

 

n / || n ||  ·  (x + C) = d / || n ||

 

이 식을 원점에서 최단거리를 구하는 식의 형태로 좌변을 정리하면,

 

n / || n ||  ·  (x + C) = d / || n ||

(n / || n ||  ·  x) + (n / || n ||  ·  C) = d / || n ||

 

(n / || n ||  ·  x) = d / || n || -  (n / || n ||  ·  C)

( n ·  x ) / || n || = { d  -  (n  ·  C) } / || n ||

 

붉은색으로 표시한 부분이, 평면의 방정식을 알고 있을 때, 그 평면과 임의 점 사이 최단거리를 구하는 공식이다.

한번 간단한 예시를 통해 이를 확인해보자.

 

z 축에 수직이면서, (0, 0, -1) 을 지나는 평면이 있다고 해보자.

이  평면의 방정식을 구해보면

 

(0, 0, 1) · (x, y, z) = d

 

(0, 0, -1) 을 대입하면

 

(0, 0, 1) · (0, 0, -1) = -1

d = -1

 

따라서 구하는 평면의 방정식은

(0, 0, 1) · (x, y, z) = -1

 

이 평면식의 법선벡터는 normalize 되어있으니, | -1 | = 1 이 원점에서 평면까지 최단 거리이다.

그리고 이 평면은 실제로 xy 평면과 평행하면서 z = -1 을 지나는 평면이므로 최단거리가 1이 맞다.

 

한번 이 평면과 임의점 (1, 2, 3) 사이의 최단거리를 구해보자.

그래프 공간에 평면과 점을 그려보면다면 최단거리는 4가 됨을 알 수 있다.

과연 4가 나오는지 확인해보자.

 

한번 아까 구한 공식의 유도과정을 따라 최단 거리를 구해보면

 

(0, 0, 1) · (x+1, y+2, z+3) = -1

z + 3 = -1

z = -4

 

따라서 평행이동된 평면은

(0, 0, 1) · (x, y, z) = -4

 

법선벡터가 normalize 되어있으므로 | -4 | = 4가 최단거리이며, 이는 우리가 알고 있는 값과 일치한다.

 

이번엔 공식을 그대로 사용해보자.

{ d  -  (n  ·  C) } / || n ||

 

에서 d = -1, n = (0, 0, 1), C = (1, 2, 3) 이므로

 

 {-1 - (0, 0, 1) · (1, 2, 3) } / || (0, 0, 1) ||

= -1 - 3 / 1

= -4

 

위에서 구한대로 최단 거리가 나온다.


직선과 직선 사이 최단 거리

3차원 공간에서 직선과 직선 사이 관계는 서로 만나거나, 교점을 갖거나, 일치하거나, 평행하거나, 엇갈린다.

이때 서로 평행하거나 엇갈리는 두 직선 사이의 최단 거리를 어떻게 구할 수 있을까?

 

서로 평행하거나 엇갈리는 두 직선 사이 최단 거리를 지나는 직선은 두 직선 모두와 수직임을 이용하면 구할 수 있다.

 

두 직선의 방향 벡터를 a1, a2 라고 가정하고 시작한다.

 

우선 두 직선 사이 최단 거리를 만드는 벡터의 방향을 구해보자.

이 벡터의 방향은 위에 적었듯 두 직선 모두와 수직이므로 외적을 이용하여 구할 수 있다.

이 벡터를 n 이라고 하면 아래와 같이 계산된다.

 

n = a1 x a2

 

이제 이 벡터를 법선벡터로 하며, a1 또는 a2 를 포함하는 평면의 방정식을 구해보자

n 을 법선 벡터로 하는 평면식은 아래와 같이 쓸 수 있다.

 

n · x = d

 

만약 a1 을 포함한다면 a1 내 모든 점이 평면 위의 점이므로, a1 위의 임의 점 Pa1 을 대입해 d 값을 구할 수 있다.

 

d = n · Pa1

 

이 두 식을 이용하면, n · x = n · Pa1 로 평면의 방정식을 세울 수 있다.

 

이제 평면식을 구하였으니, 평면과 직선 사이 최단거리를 구하면 된다.

이 평면은 a2와 평행한데, 맨 위에 적었던 대로, 평면과 직선 사이 최단 거리는 직선 내 임의 점과 평면 사이 최단 거리를 구하는 것과 같다.

 

a2 위 임의 점 Pa2 와 위에서 구한 평면식 사이 최단 거리를 임의 점과 평면 사이 최단 거리 식을 이용해 구하면

 

 { d  -  (n  ·  C) } / || n ||

 

에서

( n · Pa1 - n ·Pa2 ) / || n ||

 

이 된다.


이렇게 보면 진짜 뭐가 뭔지 전혀 와닿지 않는다.

직접 실제 수식을 이용해 확인해보자.

 

서로 엇갈리는 두 직선을 아래와 같이 가정하자.

 

L1 (t) = (1, 0, 0) + (-1, 1, 0) * t

L2 (s) = (0, 0, -1) + (0, 0, 1) * s

 

두 직선 사이 최단 거리를 구하기 위해, 두 직선 사이 최단 거리를 만드는 벡터의 방향을 외적으로 구해보자.

 

(-1, 1, 0) x (0, 0, 1) = (1 * 1 - 0 * 0, 0 * 0 - (-1) * 1, (-1) * 0 - 1 * 0)

= (1, 1, 0)

 

이제 (1, 1, 0) 을 법선벡터로 하고, L1 위의 임의점 (1, 0, 0) 을 지나는 평면방정식을 구하면

 

(1, 1, 0) · (1, 0, 0) = d

d = 1

 

따라서 평면식은

(1, 1, 0) · (x, y, z) = 1

 

이 평면과 L2 위의 임의점 (0, 0, 0) 사이 최단 거리를 구해보면, 원점과 평면 사이 최단거리이므로

(1, 1, 0) 을 normalize 하면 (1/√2, 1/√2, 0) · (x, y, z) = 1/√2 에서 최단 거리는 1/√2 이다.

 

또는

 

( n · Pa1 - n ·Pa2 ) / || n ||

 

에서

 [ { (1, 1, 0) · (1, 0, 0) }  - { (1, 1, 0) · (0, 0, 0) } ] / || (1, 1, 0) ||

= (1 - 0) / 1

= 1/√2 

 

와 같이 구할 수 있다.

 


지금까지 점, 직선, 평면 사이 관계에서 최단 거리를 구하는 방법을 정리하여 보았다.

다음 글에서는 평면에 입사하는 벡터의 반사벡터를 구하는 방법을 정리하고자 한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 멀티미디어응용수학' 카테고리의 다른 글

[멀티미디어응용수학] 6. 삼각형 평면에 쏜 광선의 충돌 판단  (0) 2023.10.19
[멀티미디어응용수학] 5. 입사 벡터로부터 반사 벡터 구하기  (0) 2023.10.17
[멀티미디어응용수학] 3. 외적과 외적의 응용  (0) 2023.10.12
[멀티미디어응용수학] 2. 내적과 내적의 응용  (0) 2023.10.11
[멀티미디어응용수학] 1. 직선의 교점 계산  (1) 2023.10.06
  1. 직선과 점 사이 최단 거리
  2. 평면과 점 사이 최단 거리
  3. 직선과 직선 사이 최단 거리
'CS/멀티미디어응용수학' 카테고리의 다른 글
  • [멀티미디어응용수학] 6. 삼각형 평면에 쏜 광선의 충돌 판단
  • [멀티미디어응용수학] 5. 입사 벡터로부터 반사 벡터 구하기
  • [멀티미디어응용수학] 3. 외적과 외적의 응용
  • [멀티미디어응용수학] 2. 내적과 내적의 응용
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
에버듀
Blog. 에버듀
에버듀
전체
오늘
어제
  • 분류 전체보기 (606)
    • 개인 프로젝트 (43)
      • [2020] 카카오톡 봇 (9)
      • [2021] 코드악보 공유APP (22)
      • [2022] 유튜브 뮤직 클론코딩 (9)
      • [2025] 고성능 에코서버 만들기 (0)
      • 간단한 프로젝트 (3)
    • 팀 프로젝트 (22)
      • [2020] 인공지능 숫자야구 (4)
      • [2022] OSAM 온라인 해커톤 (10)
      • [2024] GDSC 프로젝트 트랙 (6)
      • [2025] 큰소리 웹 페이지 (2)
    • 알고리즘 (PS) (107)
      • BOJ (101)
      • Programmers (5)
      • 알고리즘 이모저모 (1)
    • CS (329)
      • 자료구조 (19)
      • 어셈블리 (41)
      • 멀티미디어응용수학 (7)
      • 컴퓨터 구조 (29)
      • 알고리즘 분석 (4)
      • 컴퓨터 네트워크 (38)
      • 프로그래밍언어론 (15)
      • HCI 윈도우즈프로그래밍 (26)
      • 기초데이터베이스 (29)
      • 운영체제 (23)
      • 오토마타 (24)
      • 문제해결기법 (11)
      • 블록체인 (22)
      • 소프트웨어공학 (21)
      • 기계학습심화 (12)
      • 컴퓨터그래픽스와 메타버스 (8)
    • 자기계발 (37)
      • 동아리 (7)
      • 자격증 (3)
      • 코딩테스트, 대회 (8)
      • 생각 정리 (18)
      • 머니 스터디 (1)
    • WEB(BE) (5)
      • express.js (1)
      • flask (0)
      • Spring & Spring Boot (4)
    • WEB(FE) (2)
      • html, css, js (1)
      • React.js (1)
    • Tool & Language (6)
      • Edit Plus (1)
      • Git (1)
      • Python3 (2)
      • Java (2)
    • Infra (12)
      • AWS (1)
      • Oracle Cloud (8)
      • Firebase (2)
      • Network (1)
    • Android (18)
      • Java (6)
      • Flutter (12)
    • Window (2)
      • Visual Studio 없이 WPF (1)
      • MFC (1)
    • 독서 (14)
      • Inside Javascript (7)
      • Database Internals (6)
      • 한 글 후기 (1)
    • 인턴 (8)
      • 델파이 (7)
      • Oracle (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.1.4
에버듀
[멀티미디어응용수학] 4. 직선과 평면, 점 사이의 최단 거리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.