2014년 1월 9일 목요일

임의의 축 회전 (Axis Angle Rotation)

R2 공간에서 벡터 i=(1, 0)를 회전시 다음과 같이 나타낼 수 있다.



여기서는 기저 벡터를 i, j 대신에 v_perp, w를 사용하고 회전축 A를 이용한다.




















v_prop: A축에 대해 projection
v_perp: A축에 대해 perpendicular

위 식은 v의 수직 성분만 있으므로 수평 성분을 더하면 회전된 v를 계산할 수 있다.

그런데 v_prop는 회전축A에 대하여 회전을 하여도 변하지 않게 된다.

그래서 회전된 v는 다음과 같다.

먼저 v_prop를 찾아보자.

회전축인 A에 v를 투영하면 확인할 수 있다.



: A의 unit vector


그리고 v에서 수평 성분인 v_prop를 빼면 수직 성분인 v_perp를 구할 수 있게 된다.




w는 회전축A와 v의 외적으로 구해진다.



위의 회전식을 지금까지 구해진 식으로 풀어서 적으면







그리고 v를 분리하기 위해 tensor product와 skew matrix를 사용하여 정리 한다.

[tensor product]
두개의 벡터 v, w가 있을때














그리고 3개의 벡터 u, v, w가 있을 때



[skew matrix]
외적을 행렬로 표현할때 사용
벡터 v를 skew matrix로 표현하면






그리고 여기에 벡터 w를 곱해주면 외적이 행렬로 표현 된다.


식을 다시 정리하면




S: skew matrix





I: identity matrix

이제 위의 식에서 벡터 v에 곱해지는 부분이 바로 벡터 v를 회전 시키는 행렬 부분이 된다.
다시  행렬 부분만  풀어 적게 되면  다음과 같이 된다.


















위의 행렬을 임의의 벡터 v에 곱하게 되면 임의의 회전축 A를 기준으로
회전된 벡터 v를 구할 수 있다.

참고자료
Essential Mathematics For Games And Interactive Applications
3D 게임 프로그래밍 & 컴퓨터 그래픽을 위한 수학 제2판

댓글 2개:

  1. 좋은 내용 감사하고 퍼가요!

    답글삭제
  2. 여기만큼 잘 설명한데가 없네요 잘보고 갑니다

    답글삭제