나뭇잎 교과서

벡터로 나타낸 도형의 방정식

벡터를 쓰면 도형의 방정식을 차원과 상관없이 같은 모양으로 쓸 수 있습니다. 직선은 "한 점 + \(t\) × 방향", 평면은 "한 점에서 법선벡터에 수직인 점들", 원과 구는 "중심에서 거리가 \(r\)인 점들"입니다. 이 절에서는 매개변수를 움직이며 점이 직선과 평면을 그리는 모습을 보고, 원과 구가 같은 식 \(|\vec{p} - \vec{c}| = r\)에서 나오는 것을 확인한 뒤, 빛줄기가 공에 닿는 점을 계산해 3D 그림을 그리는 레이 트레이싱을 직접 해 봅니다.

본문

벡터로 나타낸 도형의 방정식

본문

컴퓨터 그래픽의 광선 추적은 카메라에서 화면의 각 점을 지나는 빛줄기를 쏘아, 그 빛줄기가 장면 속 물체에 처음 닿는 점을 찾아 색을 정한다. 원점의 카메라에서 앞쪽 \(z\)축 방향으로 5 m 떨어진 곳에 반지름 3 m인 공이 있다. 정면으로 쏜 빛줄기는 공의 몇 m 앞에서 닿을까? 방향 \((0, 0.6, 0.8)\)으로 비스듬히 쏜 빛줄기는 공에 닿을까, 비켜 갈까? 빛줄기와 공을 모두 벡터의 식으로 쓰면 답을 계산할 수 있을까?

카메라 O 중심 (0, 0, 5) t = 2 접점 t = 4 3 z축 방향 →
그림 1. 정면 빛줄기는 \(t = 2\)에서 공에 닿고, 비스듬한 빛줄기는 \(t = 4\)에서 공을 스치기만 한다. 그림은 \(yz\) 평면의 단면이다.
먼저 알아야 할 것위치벡터, 벡터의 내적(위치벡터, 내적과 외적), 직선의 방정식, 구의 방정식(공간좌표와 구의 방정식).

2.8.1매개변수로 그리는 직선과 평면

점 \(A\)를 지나고 방향벡터가 \(\vec u\)인 직선 위의 점 \(P\)는 \(A\)에서 \(\vec u\) 방향으로 몇 배 간 곳이므로, 위치벡터로 \(\vec p = \vec a + t\vec u\)라 쓴다. 매개변수 \(t\)가 실수 전체를 지나면 직선 전체가 그려진다. 같은 방법으로 평행하지 않은 두 방향 \(\vec u\), \(\vec v\)를 쓰면 \(\vec p = \vec a + s\vec u + t\vec v\)가 평면 하나를 그린다. 평면은 법선 벡터 \(\vec n\)으로도 나타내는데, 평면 위의 모든 점 \(P\)에 대해 \(\overrightarrow{AP}\)가 \(\vec n\)과 수직이어야 하므로 \(\vec n\cdot(\vec p - \vec a) = 0\)이다.

정리 2.8.1 벡터로 나타낸 도형

직선은 \(\vec p = \vec a + t\vec u\), 평면은 \(\vec n\cdot(\vec p - \vec a) = 0\), 중심이 \(C\)이고 반지름이 \(r\)인 구는 \(|\vec p - \vec c| = r\)이다. 원점에서 단위 방향 \(\vec d\)로 쏜 빛줄기 \(\vec p = t\vec d\)가 구와 만나는 \(t\)는 \[t^2 - 2(\vec d\cdot\vec c)\,t + |\vec c|^2 - r^2 = 0\]의 근이다.

빛줄기와 구의 교점을 구하는 식은 구의 방정식 \(|\vec p - \vec c|^2 = r^2\)에 \(\vec p = t\vec d\)를 넣고 내적을 전개하면 나온다. \(|\vec d| = 1\)이므로 \(|t\vec d - \vec c|^2 = t^2 - 2t\,\vec d\cdot\vec c + |\vec c|^2\)이다. 이차방정식의 판별식이 양수이면 빛줄기가 공을 뚫고 지나가 두 점에서 만나고, 0이면 스치고, 음수이면 비켜 간다. 두 근 가운데 작은 양수가 카메라에서 처음 닿는 점이다.1

2.8.2원과 구는 같은 식

\(|\vec p - \vec c| = r\)은 중심에서 거리가 \(r\)인 점들의 모임을 뜻하므로, 평면벡터로 읽으면 원, 공간벡터로 읽으면 구이다. 그래서 벡터 식 하나가 차원에 따라 다른 도형을 나타낸다. 마찬가지로 \(\vec n\cdot(\vec p - \vec a) = 0\)은 평면벡터로는 직선, 공간벡터로는 평면이다. 성분으로 풀어 쓰면 식이 길어지지만, 벡터로 쓰면 도형의 뜻이 그대로 드러나고 계산도 내적 몇 번으로 줄어든다.

빛줄기 방향 dd · c이차방정식결과 (0, 0, 1)5t² − 10t + 16 = 0t = 2, 8 (뚫음) (0, 0.6, 0.8)4t² − 8t + 16 = 0t = 4 (스침) (0, 0.8, 0.6)3t² − 6t + 16 = 0근 없음 (비켜 감)
그림 2. 중심 \((0, 0, 5)\), 반지름 3인 구에서 \(|\vec c|^2 - r^2 = 16\)이다. 판별식의 부호로 빛줄기가 공에 닿는지 판단한다.

2.8.3예제 풀이

예제 2.8.2

처음 질문의 두 빛줄기가 공에 처음 닿는 점의 좌표를 구하여라. 정면 빛줄기가 닿은 점에서 공의 법선 벡터를 구하고, 빛줄기와 이루는 각을 구하여라.

정면 빛줄기 \(\vec d = (0, 0, 1)\)은 \(\vec d\cdot\vec c = 5\)이므로 \(t^2 - 10t + 16 = 0\)에서 \(t = 2\) 또는 8이다. 처음 닿는 점은 \(t = 2\)인 \((0, 0, 2)\)로 카메라에서 2 m 앞이다. 비스듬한 빛줄기 \((0, 0.6, 0.8)\)은 \(\vec d\cdot\vec c = 4\)이므로 \(t^2 - 8t + 16 = (t - 4)^2 = 0\)에서 \(t = 4\)인 한 점 \((0, 2.4, 3.2)\)에서 공을 스친다. 이 점과 중심 사이의 거리는 \(\sqrt{2.4^2 + 1.8^2} = 3\)으로 반지름과 같다.

\((0, 0, 2)\)에서 공의 법선은 중심에서 그 점으로 향하는 \((0, 0, 2) - (0, 0, 5) = (0, 0, -3)\), 곧 단위벡터 \((0, 0, -1)\)이다. 빛줄기 방향 \((0, 0, 1)\)과의 내적이 \(-1\)이므로 둘은 정반대로, 빛줄기가 공을 정면으로 친다. 그래서 이 점은 가장 밝게 칠해지고, 스치는 점은 법선과 빛줄기가 수직이어서 가장자리처럼 어둡게 칠해진다. 즉 직선과 구를 벡터 식으로 쓰면 둘의 교점은 내적으로 만든 이차방정식 하나로 구해지고, 판별식이 빛줄기가 물체에 닿는지를 알려 준다.

아래 탐구 카드에서 매개변수를 바꾸며 직선과 평면을 그려 보고, 빛줄기와 구의 교점을 계산해 직접 3D 그림을 만들어 보자.

  1. 광선 추적은 1980년 미국의 휘티드가 반사와 굴절까지 따라가는 방법으로 발전시켰다. 화면 한 장에 빛줄기를 수백만 개 쏘아야 해서 오랫동안 영화에서만 쓰였지만, 지금은 게임용 그래픽 카드가 1초에 수십억 번의 교점 계산을 해낸다.
마무리

직선은 \(\vec p = \vec a + t\vec u\), 평면은 \(\vec n\cdot(\vec p - \vec a) = 0\), 구는 \(|\vec p - \vec c| = r\)로 나타내며, 같은 벡터 식이 평면에서는 원과 직선, 공간에서는 구와 평면을 그린다. 빛줄기와 구의 교점은 구의 식에 빛줄기의 식을 넣어 얻는 \(t\)의 이차방정식으로 구하고, 판별식으로 닿는지를 판단한다. 처음 질문의 정면 빛줄기는 카메라에서 2 m 앞의 \((0, 0, 2)\)에서 공에 닿고, 비스듬한 빛줄기는 \((0, 2.4, 3.2)\)에서 공을 스친다.

탐구 1

매개변수 하나는 직선을, 둘은 평면을 그릴까?

직선과 평면의 벡터방정식 · 조작
점 P
—
법선 \(\vec{n} = \vec{u}\times\vec{v}\)
—
\(\vec{n}\cdot(\vec{p} - \vec{a})\)
—

A(1, −1, 1), \(\vec{u} = (1, 1, 0)\), \(\vec{v} = (0, 1, 1)\)이다. 슬라이더를 움직이면 점 P가 지나간 자리에 점이 남는다. 그림을 끌면 돌아간다.

  1. 질문공간의 직선은 기울기 하나로 나타낼 수 없다. 평면의 방정식도 평면 위의 \(y = mx + k\)와는 모양이 다르다. 공간에서는 직선과 평면을 어떻게 식으로 쓸까?
  2. 복원위치벡터를 쓰면 점을 벡터로 다룰 수 있고, 벡터의 실수배 \(t\vec{u}\)는 \(\vec{u}\)와 같은 방향(또는 반대 방향)으로 길이만 바꾼 것이다.
  3. 설명점 A를 지나고 방향이 \(\vec{u}\)인 직선 위의 점은 "A에서 출발해 \(\vec{u}\) 방향으로 \(t\)만큼 간 점"이므로 \(\vec{p} = \vec{a} + t\vec{u}\)이다. 방향을 하나 더 추가해 \(\vec{p} = \vec{a} + s\vec{u} + t\vec{v}\)로 두면 두 방향으로 자유롭게 움직이므로 평면이 된다(\(\vec{u}, \vec{v}\)가 평행하지 않을 때). 이 평면은 \(\vec{n} = \vec{u}\times\vec{v}\)와 수직이므로 \(\vec{n}\cdot(\vec{p} - \vec{a}) = 0\), 성분으로 쓰면 \(n_1(x - x_1) + n_2(y - y_1) + n_3(z - z_1) = 0\)이 평면의 방정식이다.
  4. 연결평면에서의 직선 \(y = mx + k\)도 \(\vec{p} = (0, k) + t(1, m)\)으로 쓸 수 있다. 벡터방정식은 차원과 상관없이 같은 모양이라 2차원, 3차원, 그 이상에서도 그대로 쓰인다. 다음 카드의 원과 구도 마찬가지이다.
  5. 적용직선 모드에서 \(t\)를 끝까지 움직여 자취가 곧은 직선이 되는지 보자. 평면 모드에서는 \(s\)와 \(t\)를 번갈아 움직여 자취로 평면을 채우자. 자취의 모든 점에서 \(\vec{n}\cdot(\vec{p} - \vec{a}) = 0\)인지 표로 확인해 보자.
  6. 판단\(\vec{u}\)와 \(\vec{v}\)가 평행하면 \(s\vec{u} + t\vec{v}\)는 한 방향으로만 움직여 평면이 아니라 직선이 된다. 이때 외적은 영벡터라 법선도 정할 수 없다. 또 같은 직선을 나타내는 벡터방정식은 하나가 아니다. A를 직선 위의 다른 점으로, \(\vec{u}\)를 그 실수배로 바꿔도 같은 직선이다.

확인조건이 달라지면

점 \((1, 0, 2)\)를 지나고 법선벡터가 \((2, -1, 3)\)인 평면의 방정식은?

탐구 2

원과 구는 같은 식 하나로 쓸 수 있을까?

원과 구의 벡터방정식 · 도전
\(|\vec{p} - \vec{c}|^2\)
—
\(r^2\)
9
점 P는
—

—

중심은 원점, 반지름은 3이다. 도전해 보자. 좌표가 모두 정수이면서 원(구) 위에 있는 점을 모두 찾아보자. 좌표축 위의 점 말고도 있을까?

  1. 질문원의 방정식 \(x^2 + y^2 = r^2\)과 구의 방정식 \(x^2 + y^2 + z^2 = r^2\)은 아주 닮았다. 두 식을 같은 말로 설명할 수 있을까?
  2. 복원벡터의 크기는 \(|\vec{v}| = \sqrt{v_1^2 + v_2^2}\) (공간에서는 \(\sqrt{v_1^2 + v_2^2 + v_3^2}\))이고, \(|\vec{v}|^2 = \vec{v}\cdot\vec{v}\)이다.
  3. 설명원과 구는 모두 "중심 C에서 거리가 \(r\)인 점들의 모임"이다. 거리를 벡터의 크기로 쓰면 둘 다 \(|\vec{p} - \vec{c}| = r\), 또는 \((\vec{p} - \vec{c})\cdot(\vec{p} - \vec{c}) = r^2\)이다. 이 식을 성분으로 풀면 평면에서는 \((x - a)^2 + (y - b)^2 = r^2\), 공간에서는 \((x - a)^2 + (y - b)^2 + (z - c)^2 = r^2\)이 나온다. \(|\vec{p} - \vec{c}| < r\)이면 안쪽, \(> r\)이면 바깥쪽이다.
  4. 연결벡터 식으로 쓰면 접선과 접평면도 간단해진다. 원(구) 위의 점 \(\vec{p}_0\)에서의 접선(접평면)은 반지름 방향 \(\vec{p}_0 - \vec{c}\)에 수직이므로 \((\vec{p}_0 - \vec{c})\cdot(\vec{p} - \vec{p}_0) = 0\)이다. 다음 카드는 직선과 구의 교점을 이 식으로 구한다.
  5. 적용점 P를 움직여 안쪽, 원(구) 위, 바깥쪽을 확인해 보자. 공간 모드에서 좌표가 모두 정수인 구 위의 점을 찾아보자. \(1^2 + 2^2 + 2^2 = 9\)를 떠올리면 몇 개나 나오는가? 평면 모드에서는 몇 개인가?
  6. 판단\(|\vec{p} - \vec{c}| = r\)을 \(\vec{p} - \vec{c} = r\)로 쓰면 안 된다. 왼쪽은 벡터, 오른쪽은 수라서 같을 수 없다. 거리는 반드시 벡터의 크기로 재야 한다.

확인조건이 달라지면

점 \((2, -1, 3)\)이 중심 \((1, 1, 1)\), 반지름 \(r\)인 구 위에 있으려면 \(r\)은?

탐구 3

빛줄기와 구의 교점만 계산해서 3D 그림을 그릴 수 있을까?

직선과 구의 교점 · 레이 트레이싱 · 활용

그림의 한 칸을 누르면 그 칸의 빛줄기 계산을 보여 줍니다.

  1. 질문영화 특수효과와 최신 게임은 "레이 트레이싱"으로 실제 사진 같은 그림을 만든다. 화면의 점 하나하나에서 빛줄기를 거꾸로 쏘아 무엇에 닿는지 계산한다는데, 그 계산은 무엇일까?
  2. 복원직선은 \(\vec{p} = \vec{o} + t\vec{d}\), 구는 \(|\vec{p} - \vec{c}| = r\)로 나타낸다. 이차방정식 \(at^2 + bt + c = 0\)의 판별식이 음수이면 실근이 없다.
  3. 설명눈(카메라) \(\vec{o}\)에서 화소 쪽으로 방향 \(\vec{d}\)인 빛줄기를 쏜다. 이 직선이 구와 만나는 점은 \(|\vec{o} + t\vec{d} - \vec{c}|^2 = r^2\)을 풀면 된다. \(\vec{w} = \vec{o} - \vec{c}\)로 놓으면 \((\vec{d}\cdot\vec{d})t^2 + 2(\vec{d}\cdot\vec{w})t + (\vec{w}\cdot\vec{w} - r^2) = 0\)이라는 이차방정식이 된다. 판별식이 음수면 빛줄기가 구를 비켜 가므로 배경(바닥)을 칠하고, 양수면 작은 근 \(t\)가 눈에 먼저 닿는 점이다. 그 점의 법선 \(\frac{\vec{p} - \vec{c}}{r}\)과 빛 방향의 내적으로 밝기를 정하고, 바닥에서는 해 쪽으로 다시 빛줄기를 쏘아 구에 막히면 그림자를 칠한다.
  4. 연결이 카드의 그림은 앞에서 배운 세 가지만으로 그렸다. 직선의 벡터방정식, 구의 벡터방정식, 그리고 밝기를 정하는 내적이다. 실제 레이 트레이싱은 반사와 굴절까지 따라가므로 화소 하나에 수많은 빛줄기를 계산한다.
  5. 적용해상도를 8칸부터 늘리며 그림이 어떻게 또렷해지는지 보자. 구의 테두리 칸을 눌러 판별식이 0에 가까운지 확인해 보자. 그림자가 생긴 바닥 칸을 누르면 어떤 계산이 나오는가?
  6. 판단두 근 가운데 작은 근을 고르는 이유는 눈에 먼저 닿는 점이 앞쪽 표면이기 때문이다. 큰 근은 구의 뒤쪽 표면이다. 또 \(t < 0\)인 근은 눈 뒤쪽이므로 버린다. 이 판단을 빠뜨리면 보이지 않아야 할 면이 그려진다.

확인조건이 달라지면

원점에서 방향 \((1, 0, 0)\)으로 쏜 빛줄기가 중심 \((5, 2, 0)\), 반지름 \(r\)인 구에 닿으려면 \(r\)은 어떤 범위여야 할까?

AI 출제 문항연습문제 풀어보기10문항
Esc

↑↓ 고르기Enter 열기