[그래픽스] 오일러 변환 & Quaternion

YEOM JINSEOP·2023년 11월 23일
0

Computer Graphics

목록 보기
12/14

Euler transform

  • 세 개의 주축 중심 회전을 결합한 것.

  • 주축은 world space에서 택할 수도 있고, object space에서 택할 수도 있다.
    물체가 움직이면 그 space도 같이 움직인다.

  • 물체의 방향은 회전이 결정한다.
    물체의 방향을 정의하는데 있어 오일러 각(Euler angle)은 매우 직관적인 수단이다.
    오일러 변환은 각도 3개로 표현된다.
    세 축 중심의 회전각 θx,θy,θz\theta_x, \theta_y, \theta_z을 오일러 각(Euler angles)라고 부른다.

  • 어떤 축을 먼저 회전하는 순서에 따라 결과가 달라진다.


Keyframe Animation과 Euler transform

  • animator는 rendering될 모든 frame에서의 동작을 정의하진 않는다.

  • key frame 사이의 in-between frame은 key frame의 key data들 간의 interpolation으로 생성한다.
    key data의 예로는 물체의 위치, 방향, scaling factor 등을 들 수 있다.

2D Keyframe Animation

  • key frame의 key data를 각각 {p0,p1}\{p_0, p_1\}{p1,p2}\{p_1, p_2\}라고 할 때,
    (단, pip_i는 사각형 중심의 좌표, θi\theta_i: 회전각 = 방향)

    다음과 같이 interpolation된다.

3D Keyframe Animation

  • 가장 오른쪽의 orientation이 x,y,z축 중심의 회전 각도를 보여주는데, 이것이 오일러 각(euler angle)이다.

  • 부드러운 animation은 고차원(high-order) interpolation을 통해 얻어진다.

Euler Angle Interpolation

  • Euler angle이 가진 문제는, 올바르게 interpolation 된다는 보장이 없다.
    따라서 interpolation이 주로 사용되는 keyframe animation에는 적합하지 않다.

  • 반면, 임의의 방향이나 회전을 표현하는 또 다른 기법인 quaternion은 항상 올바르게 보간된다.

Quaternion

  • quaternion qq는 복소수를 확장한 것으로, 다음과 같이 네 개의 항으로 표현된다.
    (qx,qy,qz,qw)=qxi+qyj+qzk+qw(q_x, q_y, q_z, q_w) = q_xi + q_yj + q_zk +q_w

  • 허수부(imaginary part): qx,qy,qzq_x, q_y, q_z
    실수부(real part): qwq_w
    허수 단위(imaginary unit): i,j,ki, j, k
    \\
    허수부는 종종 qvq_v로 줄여쓴다. 그래서 quaternion은 (qv,qw)(q_v, q_w)로 표현하기도 한다.

  • 허수 단위는 다음과 같은 특징을 지닌다.
    i2=j2=k2=1i^2 = j^2 = k^2 = -1
    \\
    또한, 두 개의 서로 다른 허수단위가 곱해지면, 다음과 같은 순환치환(cyclic permutation)적인 특징을 가진다.
    ij=k,ji=kjk=i,kj=iki=j,ik=jij = k, ji = -k jk = i, kj = -i ki = j, ik = -j

  • 일반 복소수처럼 qutennion도 켤레를 가진다.
    q의 켤레 quternion은 다음과 같다.
    q=(qv,qw)     =(qx,qy,qz,qw)    =qxiqyjqzk+qwq^* = (-q_v, q_w)\\ \ \ \ \ \ = (-q_x, -q_y, -q_z, q_w) \\ \ \ \ \ = -q_xi - q_yj -q_zk + q_w

  • quaternion의 크기(norm)
    q=qx2+qy2+qz2+qw2||q|| = \sqrt{q_x^2+q_y^2+q_z^2+q_w^2}
    만약, 크기가 1이라면 qq는 단위 quaternion(unit quternion)이라 불린다.

Quaternion을 이용한 회전

2차원 회전

  • 2차원에서 (x,y)(x,y)좌표를 가진 벡터를 반시계방향으로 θ\theta만큼 회전하는 것은 다음과 같이 행렬-벡터 곱셈으로 표현되었다.

  • 이제 xx를 실수부로, yy를 허수부로 가지는 복소수 x+yix + yipp라 표기하자.
    한편, 회전각 θ\theta가 주여졌을 때, 이를 크기가 1인 극형식(polar form)의 복소수로 표현하면,
    qq = cosθ+sinθicos\theta + sin\theta i가 된다.

  • 위의 복소수를 이용해 2차원 회전을 표현하면, 다음과 같다.
    pq=(x+yi)(cosθ+sinθi)     =(xcosθysinθ)+(xsinθ+ycosθ)ipq = (x+yi)(cos\theta + sin\theta i) \\ \ \ \ \ \ = (xcos\theta - ysin\theta) + (xsin\theta + ycos\theta)i

3차원 회전

  • 3차원 벡터 ppuu 중심으로 θ\theta만큼 회전시키는 경우,
    회전할 벡터와 회전 변환 각각을 quaternion으로 표현하면, 다음과 같다.
    \\
    p=(pv,pw)    =(p,0)p = (p_v, p_w) \\ \ \ \ \ = (p,0)
    (허수부 pp, 실수부 0)
    \\
    또한, 회전축 uu와 회전각 θ\theta로 또 다른 quaternion qq를 다음과 같이 정의한다.
    이때 회전을 표현하는 quaternion의 크기는 1이 되어야 하므로, uu를 단위벡터로 만든다.
    그러면 크기가 1인 극형식(polar form)의 quaternion은 다음과 같다.
    \\
    q=(qv,qw)    =(sinθ2u,cosθ2)q = (q_v, q_w) \\ \ \ \ \ =(sin\frac{\theta}{2}u, cos\frac{\theta}{2})
    \\
    ppuu 중심으로 θ\theta만큼 회전하는 것은 다음과 같이 표현된다.
    \\
    p=qpq=(x,y,z,)p' = qpq^* = (x',y',z', ⬜ )
    (x,y,zx', y', z'은 허수부로, pp가 회전된 벡터이다.)

  • 회전된 벡터 pp'을 또 다른 quaternion rr을 사용해 회전시키는 경우를 생각해 보자.
    \\
    rpr=r(qpq)r          =(rq)p(qr)          =(rq)p(rq)rp'r^* = r(qpq^*)r^* \\ \ \ \ \ \ \ \ \ \ \ = (rq)p(q^*r^*) \\ \ \ \ \ \ \ \ \ \ \ =(rq)p(rq)^*
    \\
    이는 rqrq가 두 회전이 결합된 quaternion임을 보여준다.


  • 'uu를 중심으로 θ\theta만큼 회전하는 것'은
    'u-u를 중심으로 θ-\theta만큼 회전하는 것'과 같다.

    아래 그림을 보자.

  • qq를 'uu를 중심으로 θ\theta만큼 회전하는 것' 이라고 하고,
    rr을 'u-u를 중심으로 θ-\theta만큼 회전하는 것' 이라고 할 때,
    \\
    q=(qv,qw)    =(sinθ2u,cosθ2)q = (q_v, q_w) \\ \ \ \ \ =(sin\frac{\theta}{2}u, cos\frac{\theta}{2})
    \\
    r=(rv,rw)    =(sinθ2u,cosθ2)    =(sinθ2u,cosθ2)r = (r_v, r_w) \\ \ \ \ \ =(sin\frac{-\theta}{2}{-u}, cos\frac{-\theta}{2}) \\ \ \ \ \ =(sin\frac{\theta}{2}u, cos\frac{\theta}{2})
    \\
    qqrr이 동일한 quaternion임을 알 수 있다.

  • q=qq = -q 이다. 즉, 동일한 회전을 표현한다.

  • quaternion qq는 'uu 중심 θ\theta만큼 회전', 즉, q=(sinθ2u,cosθ2)q=(sin\frac{\theta}{2}u, cos\frac{\theta}{2})이고,
    quaternion ss는 'uu 중심 2π+θ2\pi + \theta 만큼 회전' 이라고 할 때,
    \\

    이는 qq의 모든 원소의 부호를 바꾼 것이므로 s=qs=-q로 쓸 수 있다.
    따라서 q=qq = -q이므로, qqq-q는 동일한 회전을 표현한다.


Quaterntion의 interpolation

  • 두 quaternion qqrr을 생각해보자. 이들은 [0,1] 범위에서 정규화된 parameter tt를 사용해 보간된다.
    다음은 구체 선형 보간 식이다. (spherical linear interpolation)

  • 여기에서 qqrr 사이의 각도인 ϕ\phi는 다음과 같이 계산된다.


Quaterntion과 회전 행렬

  • quaternion (qx,qy,qz,qw)(q_x, q_y, q_z, q_w)가 주어졌을 때, 이를 회전 행렬로 전환하면 다음과 같다.

0개의 댓글

관련 채용 정보