주어진 문제
3차원 공간에 점광원과 구가 있다. 점광원은 모든 방향으로 빛을 방사하며 구는 빛을 가린다. 구가 빛을 가리기 때문에 생기는 그림자가 x-y평면에 만드는 자취의 방정식을 구하여라.

준비단계.
광원이 $A$에 있고, 구의 중심이 $S$에 있다고 하자. 그리고 구의 반지름은 $d$라고 하자.

$k=|A-S|$라 하자.

1단계
광원을 꼭지점으로 하는 원뿔 중, 구에 접하는 것을 구한다.

1-1단계
원뿔이 구에 접한다고 하면, 구와 원뿔의 접점은 원을 이룬다. 이때, 이 원의 중심을 $C$라고 하고, 원의 반지름을 $R$이라고 하자.

1-1-1단계
구에 접하는 원의 중심의 위치는 간단한 비례식을 통해서 구할 수 있다. 또는 피타고라스의 정리를 이용해도 구할 수 있다. 자세한 계산을 생략한 채 구한다면 다음과 같다.
$C = (S-A)(1-\frac{d^2}{k})+X$

1-1-2단계
구에 접하는 원의 반지름을 $R$이라고 하면, 피타고라스의 정리를 이용해서 쉽게 구할 수 있다.
$R = d^2(1-\frac{1}{k})$

1-2단계
원뿔이 구에 접하면서 생기는 원의 방정식을 찾는다. 원 위에 있는 점을 $B$라고 하자. 그럼, 원 위에 있는 점은 다음의 두 방정식을 모두 만족해야 한다.

평면의 방정식
$(A-C)\cdot (B-C) = 0$

원의 방정식
$|B-C|^2 = R^2$

이 방정식은 미지수가 3개인 2차 연립 방정식이다. A, C, R을 알고 있으므로 B도 알 수 있다. 하지만 "원"은 1차원 도형이기 때문에, 1개의 매개변수를 남겨두고 나머지 2개는 그 매개변수 1개로 표현해야 한다. (그렇게 해야만 앞으로 그림자가 만드는 자취의 방정식을 구할 때 그 매개변수를 쓸 수 있다.)

$B=(b_x(\theta), b_y(\theta), b_z(\theta))$

라고 하자.
1-2-1단계
$A-C = G$
$B-C = H$
라고 하자. 그럼 위의 방정식은
$G\cdot H = 0$
$|H|=R$
으로 변신한다. 우린 H가 뭔지 알아내면 된다.

이걸 쉽게 풀려면, 일단 이게 원의 방정식이라는걸 알고 있으니까, 원의 극좌표 형식을 생각해 보자. 가령 $\alpha$와 $\beta$가 크기가 1이고 서로 수직인 벡터라고 하면
$R(\alpha\cos(\theta) +\beta \sin(\theta)) = H$
이제 $\alpha$와 $\beta$가 G에 수직인 벡터이기만 하면 된다. 그런데, G의 수직인 벡터는 쉽게 찾아낼 수 있다.

1-2-2단계
다음의 보조정리를 설명하고 넘어간다.
K와 L이 그냥 어떤 두 벡터라고 하자. 단, 이때 K는 $|K|=1$을 만족한다. 그럼 L로부터 항상 K에 수직이면서 서로 직교하는 두 벡터 M과 N을 찾아낼 수 있다.
벡터 M을 다음과 같이 정의하자.
$M = L - (K \cdot L)$
벡터 M이 K와 직교하는 것은 쉽게 알 수 있다. (내적 해보면 된다.)
이제 K와 M에 동시에 직교하는 벡터도 다음과 같이 알 수 있다.
$N = K\times M$
이때 $\times$는 통상의 3차원 Cross product를 의미한다.

여기서 얻은 M과 N을 크기를 1로 만들어 주면 1-2-1단계의 $\alpha$와 $\beta$를 알아낼 수 있다.

1-3단계
광원과 원 위에 있는 점을 지나는 직선의 방정식을 구한다. 공간에서 두 점 A와 B를 지나는 직선의 방정식은 다음과 같다.
$\frac{x-a_x}{b_x - a_x} = \frac{y-a_y}{b_y-a_y} = \frac{z-a_z}{b_z - a_z}$

이때, B의 각 성분은 매개변수 $\theta$에 따라서 바뀌므로 실질적으로 위의 직선의 방정식은 원뿔의 방정식이다!

2단계
그림자가 만드는 자취의 방정식을 알아낸다.

2-1단계
1단계에서 알아낸 원뿔의 방정식에 z=0을 대입해서 그 조건을 만족하는 $(x(\theta), y(\theta))$를 찾아낸다.

2-2단계
필요하다면 위에서 알아낸 매개변수 방정식을 $y=f(x)$ 꼴로 바꿔준다.

이 모든 계산에 A, S, d를 문자로 대입해서 풀어낼 수도 있다. 여백이 부족한건 아니지만 일단 그냥 둔다.

참고로, 문자로 대입해서 명시적으로(Explicitely) 풀고 싶다면 1-3단계 -> 2-1단계 -> 2-2단계를 먼저 해결한 후, 1-2단계부터 1-1단계로 거꾸로 거슬러 올라가는 것이 쉬울 것이다.
by snowall 2010. 7. 5. 06:11