2. x
y
P(x,y)
앞으로 두가지 좌표계를 이용해서 회전에 대해 풀어서 설명할 것이다.
1. 우리가 보통 쓰는 xyz직교 좌표계
- (x,y,z)로 임의의 점을 표현
2. 또 다른 극 좌표계라는 것을 사용
- 임의의 한 점을 r(원점으로부터의 거리)와 @(x축으로부터 떨어진 각도(반시계방향)) 로 표현한다.
- (x축위의 길이 r짜리 직선을 @도 만큼 회전하는 것을 상상해보자)
@
P(r,@)
같은 점을 두 가지
방법으로 표현
3. x
y
@
P(x,y)
P’(x’,y’)
$
1. 딱 봐도 극 좌표계로는 회전을 표현하기 쉬워보인다.
- 길이가 2인 직선을 x축에서 90도 회전한 점 = (2, 90)(여기서 도가 각도법인지 라디안법인지는 상관 말자. 어짜피 그건 리소스일뿐 공식은 똑같다.)
- 길이가 4인 직선을 x축에서 30도 회전한 점 = (4, 30)
- 으로 표현이 가능하다.
2. 그럼 극 좌표계를 xyz직교 좌표계로 변환 시킬 줄만 알면 회전은 쉽게 풀리겠다.
@
$
P(r,@)
P’(r,@+$)
같은 점을 두 가지
방법으로 표현
4. @
P(r,@)
극 좌표계로 표현된 어떤 점
P(r, @)은
xyz직교 좌표계로
P.x = r cos @
P.y = r sin @
로 표현이 가능하겠다.
P.x
P.y
cos @ = 밑변/빗변
빗변 * cos @ = 밑변
sin @ = 높이/빗변
빗변 * sin @ = 높이
이기 때문이다.
극 좌표계를 xyz직교 좌표계로 변환 시키는 일은 어렵지 않다.
5. 그럼 이제 본론인 회전에 대해서 강구해보자.
@
P(r,@)
P를 P’으로 $만큼 회전시킨다고 했을 때,
P’은 (r, @+$)
가 되고, xyz직교 좌표계로는
P’.x = r cos(@+$)
P’.y = r sin(@+$)
덧셈을 풀어내면
P’.x = r * (cos(@)cos($) – sin(@)sin($))
P’.y = r * (sin(@)cos($) + cos(@)sin($))
P’.x = rcos(@)cos($) – rsin(@)sin($)
P’.y = rsin(@)cos($) + rcos(@)sin($)
여기서 rcos(@)와 rsin(@)는
이전의 점 P의 극 좌표계의 x,y이므로, 점
P의 xyz직교 좌표계로도 표현이 가능하
다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
P.x
P.y
삼각함수 덧셈 정리
sin(@+$) = sin(@)cos($) + cos(@)sin($)
cos(@+$) = cos(@)cos($) – sin(@)sin($)
이게 이해가 안되면, “삼각함수의 덧셈 정리”
라는 키워드로 검색해보라.
P’(r,@+$)
$
6. P(x,y)
점 P의 x와 y의 위치를 바꾸고 x의 부호를 뒤집으면 항상 P와 직각인 벡터가 만들어진다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
이 식에서 볼 수 있듯이,
어떤 한 점이 주어지고, 각도를 주면
회전된 P’을 구할 수 있게 되었다.
좀 더 자세히 파고 들면, P(x,y)와
Q(-P.y,P.x)는 항상 직각을 이루는 벡
터이다.
P’.x = P.x * cos($) + Q.x * sin($)
P’.y = P.y * cos($) + Q.y * sin($)
때문에 다시 말하면,
“벡터P(x,y)와 반시계 방향으로 90도 직
각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
라고 말 할 수 있다.
Q(-P.y, P.x)
(직각이다…)
7. P(x,y,z)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.y, P.x, P.z)
이건 2차원의 회전이지만, 3차원의 회전에서도 똑같이 적용할 수 있다.
위 변환을 3차원 공간에서의 회전이라고 생각해본다면,
(지금 z축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)
x’ = P.x * cos($) + -P.y * sin($)
y’ = P.y * cos($) + P.x * sin($)
z’ = z
현재 z축을 기준으로 회전한다고 볼 수 있는 것이다.
x
y
8. P(y,z,x)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.z, P.y, P.x)
같은 원리로 X축 기준으로 회전한다 생각하면,
(지금 x축은 모니터를 속으로 들어가는 방향이라고3D적으로 상상을 해보라)
x’ = x
y’ = P.y * cos($) + -P.z * sin($)
z’ = P.z * cos($) + P.y * sin($)
y
z
9. P(z,x,y)
Q(-P.x,P.z,P.y)
같은 원리로 Y축 기준으로 회전한다 생각하면,
(지금 y축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)(xz가 아니라 zx기 때문에 얘만 생긴 게 좀 틀리다)
y’ = y
z’ = P.z * cos($) + -P.x * sin($)
x’ = P.x * cos($) + P.z * sin($)
z
x
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”