120 likes | 580 Views
사원수 (Quaternion). 이창희 (cagetu79@gmail.com). 사원수. 회전을 사용할 때 행렬 대신 사용하곤 하는 수학적 개념 행렬에 비해 저장 공간이 적다 회전들의 결합에 필요한 연산이 적다 보간을 할 때 좀 더 매끄러운 애니메이션이 가능. 사원수의 성질. q = w+xi+yj+zk = s + v i 2 =j 2 =k 2 =-1, ii=jj=kk=-1 ij=-ji=k, jk=-kj=i, ki=-ik=j q1+q2 = (s 1 +s 2 ) + (v 1 +v 2 )
E N D
사원수(Quaternion) 이창희(cagetu79@gmail.com)
사원수 • 회전을 사용할 때 행렬 대신 사용하곤 하는 수학적 개념 • 행렬에 비해 저장 공간이 적다 • 회전들의 결합에 필요한 연산이 적다 • 보간을 할 때 좀 더 매끄러운 애니메이션이 가능
사원수의 성질 • q = w+xi+yj+zk = s + v • i2=j2=k2=-1, ii=jj=kk=-1ij=-ji=k, jk=-kj=i, ki=-ik=j • q1+q2 = (s1+s2)+ (v1+v2) • q1q2 = s1s2 – v1•v2+s1v2+s2v1+v1*v2 • q*~q = ~q*q = q•q =|q|2 = q2 • norm(q) = q*~q • q-1 = ~q/norm(q) = ~q/q2 • q*q-1 = 1
사원수 성질 • (q1*q2)*q3 = q1*(q2*q3) • q1*q2 != q2*q1 • ~(~q) = q • ~(q1*q2) = ~q2 * ~q1 • ~(q1+q2) = ~q1+~q2
회전 • P’= qPq-1 • 준동형(homomorphism)사상 • Φ는 길이,각도,축이 모두 보존된다. • Φ(P1)Φ(P2)=Φ(P1P2) • Φq(P) = qPq-1 • Φq(P1)Φq(P2)=qP1q-1 qP2q-1=qP1qP2q-1=Φq(P1P2) • qPq-1 =(s+v)P(s-v)=(s2-t2)P+2stA*P+2t2(A•P)A • P’=cosθP+(A*P)sinθ+(A•P)A(1-cosθ)(임의의 축에 대한 회전 공식) 과 비교 • s2-t2=cosθ,2st=sinθ,2t2=1-cosθ • 축 u(단위벡터)을 중심으로 회전q = cos(θ/2) + sin(θ/2)u
회전 • 사원수q에 임의의scalar를 곱한 것 역시q와 동일한 회전 • qPq-1을 3x3행렬로 변환
Euler • 오일러각을 이용하여 사원수 만들기 • 오일러각은 x축,y축,z축을 중심으로 회전을 정의qroll =cos(θr/2)+sin(θr/2)i+0j+0kqpitch =cos(θp/2)+0i+sin(θp/2)j+0kqyaw =cos(θy/2)+0i+0j+sin(θy/2)k • Q = qrollqpitchqyaw • 사원수를 이용하여 오일러각 알아내기 • 사원수를 회전 행렬로 변환 • sinθr=-r31 • tanθp=r31/r33 • tanθy=r21/r11
보간 • 선형보간q(t) = (1-t)q1 + tq2 • 사원수 공간은 구면공간의 성격을 띄는데 선형보간을 하게되면 오차가 생긴다 • 정규화를 통해 보정가능
보간 • 일반적으로 선형보간으로 오차가 그리 크다고 보지 않기에 애니메이션을 구현할 때같은 경우 선형보간을 주로 이용 • 구면 선형 보간
Gimbal Lock • yaw(y축 회전각)을 90로 고정시키고 pitch(x축), roll(z축) 회전을 실시했을 경우 pitch 와 roll 회전이 같은 방향으로 회전하게 됨(이것이 gimbal lock) • 오일러 각으로 회전을 표현할경우 전체 회전행렬 = z축 회전행렬 * y축 회전행렬 * x축 회전행렬 과 비슷한 순서의 회전행렬(회전행렬의 순서는 사용자 임의로 바꿀수 있으며 이때 gimbal lock 되는 축도 그에 따라 바뀜)을 사용하게 되는데 이때 yaw각을 90도로 회전시켰을 경우(회전행렬의 순서상) x축이 -z축이 되어 x축회전을 하나마 나한 상태가 됨 • 사원수의 회전을 이용하여 문제를 해결
참고 • Eric Lengyel, Mathematics fo 3d game programming & computer graphics, charles river media, chapter 3 • http://g-matrix.pe.kr/feature/3dengine/quaternion.htm • Physics for Game Developers(사원수연산) • http://www.cc.gatech.edu/grads/z/Howard.Zhou/micellaneous/links_local/EularQuats.htm • http://www.gamedev.net/reference/articles/article1095.asp • http://www.gpgstudy.com/gpgiki/MathTemplate