Transform 회전
주전자 Z Axis를 기준으로 회전하는 Transform Matrix
주전자의 Vector를 이용한 회전
r = 반지름(1)
P(x,y) = (r*cosα, r*sinα)
Q(x`,y`) = (r*cosθ, r*sinθ)
x` = (r*cos(α+β)
y` = r*sin(α+β))
-- 삼각함수 공식에 따라 다음이 성립한다.--
cosβ = cos(θ-α)
cosβ = dot P Q
cosβ = lOPl*lOQl*cosβ
cosβ = cos(θ-α) = cosα*cosθ + sinα*sinθ
cosθ = cos(α+β) = cosα*cosβ - sinα*sinβ
----------------------------------------
x` = r(cosα*cosβ - sinα*sinβ)
= r*cosα*cosβ - r*sinα*sinβ
y` = r(sinα*cosβ + cosα*sinβ)
= r*sinα*cosβ + r*cosα*sinβ
-- x = r*cosα
-- y = r*sinα
x` = x*cosβ - y*sinβ
y` = y*cosβ + x*sinβ
는 다음과 같이 표현 할 수 있다.
여기에서 β는 오른손 좌표계일때의 각도이다.
맥스 matrix연산은 왼손 좌표계로 표시하기에, β의 값이 -β가 된다.
이를 MAX 수식으로 표현
[x`,y`] = [cos(-β),- sin(-β)][sin(-β), cos(-β)] * [x,y] = [cosβ, sinβ][-sinβ, cos(β)] * [x,y]
(cos 안의 각도는 음수,양수, 모두 값이 같아 부호를 생략한다.)
이를 3차원에서 Z Axis로 회전 수식은 다음과 같다.
[cosβ,sinβ,0][-sinβ,cosβ,0][0,0,1][Pos]
local rotation을 하려면 postion를 중점으로 돌려두고 rotation을 한 후에 다시 postion을 맞춰 줘야 한다.
basePos = $.pos
newTM = $.transform*[cosβ,sinβ,0][-sinβ,cosβ,0][0,0,1][$.Pos]
newTM.pos = basePos
이렇게 되어야 최종 local ratation이 된다.
-- EX -----------------------------------------
X축 중심 회전 = [1,0,0][0,cosβ,-sinβ][0,sinβ,cosβ]
Y축 중심 회전 = [cosβ,0,sinβ][0,1,0][-sinβ,0,cosβ]
Z축 중심 회전 = [cosβ,sinβ,0][-sinβ,cosβ,0][0,0,1]
----------------------------------------
'Max' 카테고리의 다른 글
MAX Custom ViewCube 적용하기 (0) | 2012.06.28 |
---|---|
기준점을 이용한 Transform 회전 (0) | 2012.03.22 |
Local Transform 과 World Transform 구하기 (0) | 2012.02.22 |
Script Controller - Transform으로 LookAt 만들기 (0) | 2012.02.09 |
쿼터니언(Quaternion) 정리 (0) | 2012.02.07 |