상세 컨텐츠

본문 제목

쿼터니언 변환 이해

Unreal

by Real_Go 2025. 12. 15. 23:27

본문

 

앞서 배운 로드리게스 변환 공식으로 부터 축에 대한 회전 결과는 위와같이 나온다는 것을 알 수 있다. 

 

그렇다면 쿼터니언 회전은 어떻게 계산 될까 

 

lhs 와 rhs 에 따라 시계방향이 + 일 수도 있고 - 일 수도 있는데 

 

일단 rhs 기준으로는 

반시계방향이 + 고 

 

위와같은 회전은 기준 축 N 을 (xi+yj+zk) 의 3d vector로 표현할 수 있고 회전 값 theta 를 w 로 표현할 수 있다. 

그러면 보통 실수부에 직교성을 가지는 수를 허수라고 표현함에 따라 

 

xi+yj+zk 는 허수 부고 w 는 회전 량을 나타내는 실수 부가 되어 복소수로 표현되겠다. 

 

일단 qz 를 먼저 생각해볼까  

qz는 z 축에 대한 w 만큼 회전이다. 그렇다면 n=  (0,0,1) 이 될테고 이 축에 대한 회전은 

v' = v cos θ +(1-cos θ)(V · (0,0,1))+((0,0,1)x V) sin θ 이 될텐데 V 를  vx,vy,vz 의 벡터라고 보면 \

외적은 아래와같이 계산될거고 

v' = v  cos θ + (1-cos θ) (0,0,vz)+ (-vy, vx, 0)sin θ 가 될거고 이걸 vx,vy,vz 로 분류하면 
       (vx cos θ - vysin θ, vycos θ + vxsin θ, vz) 가 돼서 
V' = (v'x, v'y, v'z) 라 할때 

v'x = vx cos θ - vysin θ

v'y= vycos θ + vxsin θ

v'z = vz 

가 된다.

 

여기서 Z 축 단위벡터 k = (0,0,1) 에 대한 회전 쿼터니언을 

q= k sinθ + cos θ 로 놓고 q^-1 = - k sin θ+cos θ 라고 두면 

 

v' = qvq^-1 로 된다고 보면

qv = (cos θ +ksin θ )(vxi+vyj+vzk)

  = cos θ(vxi+vyj+vzk)+ ksin θ (vxi+vyj+vzk)

  = cos θ(vxi+vyj+vzk) + sin θ(-vyi+vxj-vz)
  = (vxcos θ-vysin θ)i, (vycosθ + vxsinθ)j, vzcos θ k, -vzsin θ

(qv)q^-1 계산하면 

    ((vxcos θ-vysin θ)i +(vycosθ + vxsinθ)j + vzcos θ k -vzsin θ)(cos θ - ksin θ)

  = (vx cos^2 θ-vysin θcos θ)i+(vycos^2 θ+vxsin θcos θ)j+vzcos^2 θ k - vzsin θcos θ
      -vx sin θcos θ (ik)+vysin^2 θ (ik) -vyksin θcos θ (jk)-vxsin^2 θ(jk)+vzsin θcos θ(k*(-k))-vzsin^2 θ(k)

 

 ik= -j , jk = -i, k*(-k) = 1 

 

(vx cos^2 θ-vysin θcos θ)i+(vycos^2 θ+vxsin θcos θ)j+vzcos^2 θ k - vzsin θcos θ

 -vx sin θcos θ (-j)+vysin^2 θ (-j) -vysin θcos θ (-i)-vxsin^2 θ(-i)+vzsin θcos θ(1)-vzsin^2 θ(k)

 

뭐 이거 계산하면 배각공식 반각공식 난무한다. 여튼 계산 결과로는 

 

Z축으로 만큼 돌리고 싶으면

q=(0,0,sin(ψ/2),cos(ψ/2))

 

로 표현된다.... 

그래서 결국 


 

이 렇게 깡으로 계산된다고.... (Z->Y->X 순서 Right Handed  로 회전한다는 전제 하에) 

 

 

관련글 더보기