Transform 회전

Max 2012. 3. 8. 22:33

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]
----------------------------------------






 

Posted by Hwanggoon
,