갬장장이
[Mathematics] 19. Quaternion Multiplication
갬장장이
갬장장이의 코드 대장간
갬장장이
전체
오늘
어제
  • 분류 전체보기
    • 게임 연구소
    • 게임 제작
      • Banditors (2024~)
      • Rovenhell (2023)
      • Geophyte (2020~2021)
      • 아드레날린 러시 (2021)
      • Treadmill (2019)
      • 습작들 (2019~)
      • 그 외 (~2018)
    • 개발
      • 언리얼 엔진
      • 수학
      • 네트워크
      • 그래픽스
      • OpenGL
      • DirectX
    • 일상
    • 기타 제작

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [공지] 블로그 안내

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
개발/수학

[Mathematics] 19. Quaternion Multiplication

2022. 4. 24. 19:38

앞선 포스트에서 하나의 사원수로 여러 축에 대한 회전들의 결과를 한 번에 나타낼 수 있다는 것을 언급했다.

두 사원수는 서로 곱해 하나의 사원수로 나타낼 수 있는데, 이는 기하학적으로 두 회전운동의 결과를 하나의 회전운동으로 나타내는 것으로 이해하면 된다. 즉 여러 회전들을 우리는 서로 곱해 하나의 사원수로 나타낼 수 있다.

 

<공식화>

사원수를 곱하는 공식은 위와 같다.

 

한 번 공식을 사용해보자.

두 개의 axis-rotation r과 s가 있다고 하자. 이는 각각 사원수 하나씩으로 나타낼 수 있다.

r : 벡터 vr을 기준으로 시계 방향으로 wr만큼 회전

s : 벡터 vs를 기준으로 시계 방향으로 ws만큼 회전

 

r과 s를 합친 q는 다음과 같다.

q = rs = [ w, v ]

w = ws*wr - vs*vr

   = ws*wr - 내적(vs ,vr)

 

v = ws*vr + wr*vs + vr x vs

   = ws*vr + wr*vs + 외적(vr, vs)

 

q = [ ws*wr - 내적(vs ,vr), 

      ws*vr + wr*vs + 외적(vr, vs) ]

 

 

공식이 도출되는 과정은 아래 자료들을 참고

 

const Quaternion Quaternion::operator*(const Quaternion& q) const
{
	Quaternion r;

	r.w = w*q.w + v.Dot(q.v);
	r.v = v*q.w + q.v*w + v.Cross(q.v);

	return r;
}

사원수 곱을 함수로 나타내면 위와 같다.

 

 

* 참고1: v1 x v2 != v2 x v1이므로 외적이 들어가는 위 공식도 마찬가지로 rs != sr이다.

* 참고2: 위 식을 통해 얻은 사원수 q도 결국 [w, v]꼴 인것을 알 수 있는데, 이를 다르게 말하면, r과 s의 두 회전을 합쳐 어떤 축 v에 대해 w만큼 회전시키는 하나의 회전으로 합쳐내었다고 생각할 수 있다.

* 참고할 만한 글

http://dolphin.ivyro.net/file/dreamwiz/shadow/quaternion.html

https://ko.wikipedia.org/wiki/사원수

* 참고영상

https://www.youtube.com/watch?v=CRiR2eY5R_s&list=PLW3Zl3wyJwWOpdhYedlD-yCB7WQoHf-My&index=33 

https://www.youtube.com/watch?v=d4EgbgTm0Bg 

 

저작자표시 비영리 변경금지 (새창열림)

'개발 > 수학' 카테고리의 다른 글

[Mathematics] 21. Quaternion Slerp (Spherical Linear Interpolation)  (0) 2022.05.28
[Mathematics] 20. Quaternion을 이용한 정점 회전  (0) 2022.05.18
[Mathematics] 18. Quaternion  (0) 2022.04.24
[Mathematics] 17. Axis-Angle Rotation (Rodrigues formula)  (0) 2022.04.08
[Mathematics] 16. Plane Intersection & Frustum Culling  (0) 2022.04.03
'개발/수학' 카테고리의 다른 글
  • [Mathematics] 21. Quaternion Slerp (Spherical Linear Interpolation)
  • [Mathematics] 20. Quaternion을 이용한 정점 회전
  • [Mathematics] 18. Quaternion
  • [Mathematics] 17. Axis-Angle Rotation (Rodrigues formula)
갬장장이
갬장장이
갬장장이의 코드 대장간갬장장이 님의 블로그입니다.
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.