앞선 포스트에서 하나의 사원수로 여러 축에 대한 회전들의 결과를 한 번에 나타낼 수 있다는 것을 언급했다.
두 사원수는 서로 곱해 하나의 사원수로 나타낼 수 있는데, 이는 기하학적으로 두 회전운동의 결과를 하나의 회전운동으로 나타내는 것으로 이해하면 된다. 즉 여러 회전들을 우리는 서로 곱해 하나의 사원수로 나타낼 수 있다.
사원수를 곱하는 공식은 위와 같다.
한 번 공식을 사용해보자.
두 개의 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 > game mathematics' 카테고리의 다른 글
[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 |