때 늦은 3D 공부 중입니다. 나이 들어 정석책을 뒤지려니 죽을 맛이네요... ㅠㅠ;; 좌표계를 이동시키는 행렬 중 이동과 크기변환은 쉽게 이해가 되는데 회전행렬은 그렇지 않더군요. 삼각함수만 보이면 왠지 주눅이 들어서.. ^^;
공부한 거 정리도 할 겸 해서 회전공식을 유도하는 과정을 간단히 적어보겠습니다. 회전행렬에 왜 sin, cos이 들어가는지 궁금하신 분들만 보세요...
쉽게 생각할 수 있도록 2차원에서 접근해 보죠. 위의 그림과 같이 점 p(a,b)를 x,y 평면의 1사분면에 그려진 원과 직각삼각형에 대응시켜 봅시다. 삼각형의 길이를 a, b, c라 하고 밑변 a와 빗변 c가 이루는 각을 th라 하면 다음과 같은 관계가 있죠...
a = c * cos(th)
b = c * sin(th) ... ①
여기서 붉은 색으로 그려진 원의 반지름은 c이기 때문에 각 th가 0도일 때 점(c,0)을 th만큼 회전한 거라고 생각할 수 있겠네요.
이제 이 점을 각 th2만큼 회전시킨 점 p'(a',b')를 봅시다. 위의 관계에서 이 새로운 점 p'는 다음과 같이 생각할 수 있습니다.
a' = c * cos(th + th2)
b' = c * sin(th + th2) ... ②
식 ②는 삼각함수의 덧셈정리에 의해 다음과 같이 바꿀 수 있구요..
a' = c * cos(th) * cos(th2) - c * sin(th) * sin(th2)
b' = c * sin(th) * cos(th2) + c * cos(th) * sin(th2) ... ③
이제 식 ③에 식 ①을 넣으면 다음과 같이 바뀌죠...
a' = a * cos(th2) - b * sin(th2)
b' = a * sin(th2) + b * cos(th2)
이걸 행렬식으로 바꾸면 다음과 같구요...
| a' b' 1 | =
| a b 1 | *
| cos(th2) sin(th2) 0 |
| -sin(th2) cos(th2) 0 |
| 0 0 1 |
위의 경우는 XY평면에서 Z축을 중심으로 임의의 각도만큼 회전한 경우 입니다. 3차원으로 생각할 때 변환 후 Z값은 그대로 넘어오게 되죠. 따라서 (x,y,z)를 Z축 중심으로 th만큼 회전한 경우 Z값을 그대로 넘기는 3차원 동차행렬은 다음과 같이 구성할 수 있습니다.
Z축 회전 행렬
| x' y' z' 1 | =
다른 평면에 대해서도 생각해 보죠. 위와 마찬가지로 YZ평면에서 X축을 중심으로 th만큼 회전시킨 점 p'는 다음과 같고
| x y z 1 | *
| cos(th) sin(th) 0 0 |
| -sin(th) cos(th) 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |
p(x,y,z) --> p'(x',y',z').
x' = y
y' = y * cos(th) - z * sin(th)
z' = y * sin(th) + z * cos(th)
XZ평면에서 Y축을 중심으로 th만큼 회전시킨 점 p'는 다음과 같겠네요.
p(x,y,z) --> p'(x',y',z').
x' = x * cos(th) + z * sin(th)
y' = y
z' = - x * sin(th) + z * cos(th)
양의 방향 회전이므로 오른손 법칙에 의해 X축을 수직, Z축을 수평으로 놓은 2차원 좌표계를 그려 위의 과정대로 풀어보면 다른 축의 회전과는 sin 부호가 반대로 되는 것을 알 수 있습니다.
이제 위의 수식을 행렬로 표시하면 다음과 같게 됩니다.
X축 회전 행렬
| 1 0 0 0 |
| 0 cos(th) sin(th) 0 |
| 0 -sin(th) cos(th) 0 |
| 0 0 0 1 |
Y축 회전 행렬
| cos(th) 0 -sin(th) 0 |
| 0 1 0 0 |
| sin(th) 0 cos(th) 0 |
| 0 0 0 1 |
헥헥~~~ 끝났군요...
다음에는 뷰변환행렬을 얻는 과정에 대해 살펴보죠~~
그럼... ^^;;
2011년 2월 20일 일요일
피드 구독하기:
댓글 (Atom)
UPBIT is a South Korean company, and people died of suicide cause of coin investment.
UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...
-
연휴 마지막날 아침... 산책을 하다 한장 찍어보았다. 인생도 마찬가지로 길의 끝을 모른체 선택을 해야하는 경우가 발생한다. 나중에 그 기준이 바뀔수도 있지만. 지금 기준은 많은 사람이 함께 갈 수 있는 길을 선택하고 싶다.
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
-
제로보드 세팅. sudo apt-get install apache2 mysql-server libapache2-mod-php5 phpmyadmin ssh 패키지를 이용한 소프트웨어 설치 - APM세팅 및 ssh 설치 ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.