티스토리 뷰


 (1)

이전 글에서 구한 반사각 벡터를 구한 공식이 있으므로 빛이 구체에 반사될 때의 반사각에 관한 문제는 단순히 원의 접선에 수직인 벡터를 구하는 문제로 좁혀진다.

u 벡터를 구하기 위해서는 일단 빛의 진행 경로와 원이 만나는 지점 T를 구해야 한다. y 가 만드는 직선의 방정식이 다음과 같고

원의 방정식이 다음과 같이 주어 졌을 때

직선과 원이 만나는 지점은 두 가지 방식으로 구할 수 있다. 가장 쉽게 떠오르는 방법은 직선의 방정식을 x나 y에 관한 식으로 바꾸고 이를 원의 방정식에 대입해 2차 방정식의 근을 구하는 방법이다. 물론 이 방법으로 구한 해의 값도 정확하다. 문제는 구한 해의 방정식이 거의 암호에 가깝다는 점이다. 숫자로 방정식을 다를 때와 문자로 방정식을 다룰 때의 차이는 숫자로 다룰 때는 중간에 숫자가 합쳐져 단순화 되지만 문자는 마지막까지 고스란히 다 남는다는 점이다. 이 글에서는 2차 방정식을 푸는 방식으로 직선과 원이 만나는 지점을 구하지 않을 것이다.

위의 그림과 같이 이 문제는 직선의 방정식으로 풀 수 있다. y 벡터의 직선의 방정식과 수직이면서 원의 중심 C를 통과하는 직선의 방정식을 구하고 그 직선과 y 벡터의 직선의 방정식이 교차하는 점 p를 구한다. p를 구했다면 원의 중심과 p 사이 거리 d를 구할 수 있다. 만일 d > r 면 y벡터의 직선과 원은 만나지 않는다. d <= r 이면 직선과 원이 교차한다. d = r이면 점 p가 원과 직선이 만나는 지점이 된다. d < r이면 r과 d를 사용해 각 β를 구할 수 있다.

점 T와 P 사이 거리는

이 정보들을 이용해 원과 직선이 맞나는 점 2개를 구할 수 있다. 그 두 점 중에서 빛의 시작 점과 가까운 좌표가 빛과 먼저 만나는 지점이고 우리가 구하고자 하는 T의 좌표가 된다.

점 T를 구했다면 이제 이 점 T의 접선에 수직인 벡터 u를 구해야 한다.  u 벡터를 구하는 방법에는 2가지가 있지만 최종적인 결과는 동일하다. 접선은 원의 방정식을 미분하면 구할 수 있다.

따라서 접선에 수직인 벡터 u의 직선의 방정식의 기울기는

x,y 값에 T의 좌표를 넣으면 접선에 수직인 직선의 기울기를 구할 수 있다. 두 번째 방법은 점 T와 원의 중심 C가 만드는 직선의 기울기를 구하는 방식인데 결과적으로 미분으로 구한 식과 동일하다. 이 정보들로 벡터 u를 구할 수 있고 식 (1)을 사용해 빛이 원에서 반사되는 벡터 ref를 구할 수 있다.

이런 결과물들을 종합하여 아래와 같은 시물레이션 프로그램을 제작했다.


지금까지 볼의 반사각 및 빛의 반사각을 구하기 위해 선형대수(linear algebra)의 회전 행렬, 반사 행렬, 가우스 소거법, LU decomposition, orthogonal projection이 어떻게 활용될 수 있는지 살펴보았다. 이 글에서는 vector의 orthogonal projection만을 알아 보았는데 vector를 평면에 orthogonal projection 할 수도 있다. 이 결과물은 놀랍게도 가장 적은 오차 값으로 랜덤한 점들을 통과하는 직선을 찾는데 사용될 수 있다. Linear least squares 라고 알려진 이 기법은 line fitting에 사용되는 여러 방법 중 하나로서 알고 쓰든 모르고 쓰든 실험 데이터들을 다루는 모든 과학도와 공학도들이 매일 사용하는 중요한 툴이다.

6개의 연재 글을 통해 선형대수의 흥미로운 점들을 발견할 수 있었으면 좋겠다.

댓글
공지사항
최근에 올라온 글
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함