[컴퓨터그래픽스] 3D Rotation About Arbitrary Axis

Serun1017·2024년 10월 23일
0

컴퓨터그래픽스

목록 보기
27/31

3D Rotation About Arbitrary Axis

임의의 축을 중심으로 3차원 공간에서 물체를 회전시키는 방법은 다음과 같다.

회전축이 좌표축 (x,y,z)(x, y, z) 과 정렬되지 않은 경우, 이를 구현하기 위해서는 좌표계를 회전축과 정렬시키고 나서 회전한 후, 다시 원래 좌표계로 복원하는 과정이 필요하다.

1. 임의 축 정의

임의의 축을 벡터 u=(ux,uy,uz)u=(u_x, u_y, u_z)로 정의한다. 이 벡터는 회전축으로 uu 벡터를 중심으로 물체를 회전 시킬 것이다.

2. 회전 변환 과정

임의의 축 uu 를 기준으로 회전시키기 위해서는 좌표계를 변환한 후 회전하는 방법을 사용한다. 회전 과정은 아래와 같이 3단계로 이루어진다.

  1. 좌표계 정렬
    회전축이 zz축(혹은 x,yx, y축)에 평행하도록 좌표계를 변환(회전) 한다.
  2. 회전 적용
    zz축을 기준으로 회전 행렬을 사용하여 물체를 회전 시킨다.
  3. 좌표계 복원
    처음에 정렬했던 좌표계를 다시 원래 상태로 되돌린다.
    u=(x,y,z)u=(x, y, z)
    Rotate uu onto the z-axis
  • uu^\prime: Project uu onto yz-plane to compute angle α\alpha

3D Rotation About Arbitrary Axis_1.png

    • uu^{\prime\prime}: Rotate uu about the x-axis by angle α\alpha

3D Rotation About Arbitrary Axis_2.png

  • Rotate uu^{\prime\prime} onto the z-axis

3D Rotation About Arbitrary Axis_3.png

Example

임의의 축 uu 벡터가 다음과 같이 있다고 하자.
u=(a,b,c)u=(a, b, c)

uu 벡터를 yz 평면에 사영한 uu^\prime 벡터는 다음과 같다.

u=(0,b,c)u^\prime=(0, b, c)

그리고 최종적으로 만들 z 축 벡터 uzu_z 는 다음과 같이 정의된다.

uz=(0,0,1)u_z=(0, 0, 1)

우리는 uu^\prime 에 회전 행렬을 적용하여 uzu_z 벡터로 만들 것이다. 이를 위한 회전 행렬(x-rotation)은 다음과 같이 정의된다.

(10000cosαsinα00sinαcosα00001)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos{\alpha} & -\sin{\alpha} & 0 \\ 0 & \sin{\alpha} & \cos{\alpha} & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

여기서 cosα\cos{\alpha}sinα\sin{\alpha}는 각각 dot product 와 cross product를 이용해 구할 수 있다.

cosα=uuzuuz=cb2+c2\cos{\alpha} = \frac{u^\prime \cdot u_z}{||u^\prime|| ||u_z||} = \frac{c}{\sqrt{b^2+c^2}}
u×uz=uxuuzsinα=uxb\begin{aligned} u^\prime \times u_z &= u_x ||u^\prime|| ||u_z|| \sin{\alpha} \\ &= u_x \cdot b\end{aligned}
sinα=buuz=bb2+c2\sin{\alpha} = \frac{b}{||u^\prime|| ||u_z||} = \frac{b}{\sqrt{b^2+c^2}}

이를 정리한 회전 행렬 Rx(α)R_x(\alpha) 는 다음과 같다.

Rx(α)=(10000cb2+c2bb2+c200bb2+c2cb2+c200001)R_x(\alpha) = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & \frac{c}{\sqrt{b^2+c^2}} & \frac{-b}{\sqrt{b^2+c^2}} & 0 \\ 0 & \frac{-b}{\sqrt{b^2+c^2}} & \frac{c}{\sqrt{b^2+c^2}} & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}

혹은 각도 α\alpha 를 다음과 같이 계산하여 구할 수 있다.

α=atan2(cb2+c2,bb2+c2)\alpha = atan2(\frac{c}{\sqrt{b^2+c^2}}, \frac{b}{\sqrt{b^2+c^2}})

0개의 댓글