SlideShare a Scribd company logo
1 of 30
Download to read offline
게임 수학 강의 노트 05 - 사원수(Quaternion)
강영민
동명대학교
2015년 2학기
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 1 / 30
사원수
사원수(quaternion)는 스칼라(scalar) 값과 3차원 벡터를 묶어 구성한
복소수(complex number)
3차원 벡터 v = (a, b, c)를 각각의 축 방향 단위 벡터인 기저 i, j, k로
표현하면 ai + bj + ck
사원수는 여기에 스칼라 값 d가 추가된 d + ai + bj + ck
기저를 제외하고 표현하면 (d, (a, b, c))와 같이 표현
벡터 기호로 표현하면 (d, v)
스칼라 값은 기저가 실수의 단위 값인 1이라고 이해하면 사원수는
1, i, j, k를 기저로 하는 벡터
로보틱스와 컴퓨터 그래픽스 분야에서 회전을 다루는 데에 빈번히
이용
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 2 / 30
사원수의 연산 - 덧셈과 뺄셈
사원수 덧셈: 성분별로 더하면 된다.
두 개의 사원수 ˆp와 ˆq가 각각 (sp, vp)와 (sq, vq)일 때, 덧셈은
ˆp + ˆq = (sp + sq, vp + vq)
ˆp = (ap, bp, cp, dp)와 ˆq = (aq, bq, cq, dq)
ˆp + ˆq = (ap + aq, bp + bq, cp + cq, dp + dq)
뺄셈
ˆp − ˆq = (ap − aq, bp − bq, cp − cq, dp − dq)
스칼라와 벡터로 나누어 표현하면 다음과 같다.
ˆp = (sp, vp), ˆq = (sq, vq)
ˆp + ˆq = (sp − sq, vp − vq)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 3 / 30
사원수의 연산 - 스칼라 곱셈
사원수와 어떤 스칼라 λ를 곱하는 것은 모든 성분에 이 스칼라 값을
곱하는 것이다.
λˆp = (λsp, λvp) = (λap, λbp, λcp, λdp)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 4 / 30
사원수의 연산 - 사원수 곱셈 1/4
두 사원수 ˆp와 ˆq를 곱하려면 어떻게 해야 할까?
사원수는 서로 다른 허수 i, j, k를 가진 벡터와 스칼라의 합인 복소수
허수들 사이의 곱
i2
= j2
= k2
= −1
ij = k, jk = i, ki = j
ji = −k, kj = −i, ik = −j
ˆpˆq는 다음과 같이 표현 가능
ˆp = dp + api + bpj + cpk
ˆq = dq + aqi + bqj + cqk
ˆpˆq = dpdq + dp + dpaqi + dpbqj + dpcqk +
apidq + apiaqi + apibqj + apicqk +
bpjdq + bpjaqi + bpjbqj + bpjcqk +
cpkdq + cpkaqi + cpkbqj + cpkcqk
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 5 / 30
사원수의 연산 - 사원수 곱셈 2/4
정리하면 다음과 같다.
ˆpˆq = dpdq + dpaqi + dpbqj + dpcqk + (1)
apdqi + apaqi2 + apbqij + apcqik +
bpdqj + bpaqji + bpbqj2 + bpcqjk +
cpdqk + cpaqki + cpbqkj + cpcqk2
허수의 곱이 나타나는 부분을 정리하면,
ˆpˆq = dpdq + dpaqi + dpbqj + dpcqk + (2)
apdqi − apaq + apbqk − apcqj +
bpdqj − bpaqk − bpbq + bpcqi +
cpdqk + cpaqj − cpbqi − cpcq
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 6 / 30
사원수의 연산 - 사원수 곱셈 3/4
허수별로 정리하면 다음과 같다.
ˆpˆq = dpdq − apaq − bpbq − cpcq
+dpaqi + apdqi + (bpcq − cpbq)i
+dpbqj + bpdqj + (cpaq − apcq)j
+dpcqk + cpdqk + (apbq − bpaq)k
계산의 의미는 다음과 같다.
ˆpˆq = dpdq − (apaq + bpbq + cpcq)
+dp(aqi + bqj + cqk)
+dq(api + bpj + cpk)
+(bpcq − cpbq)i + (cpaq − apcq)j + (apbq − bpaq)k
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 7 / 30
사원수의 연산 - 사원수 곱셈 4/4
벡터의 내적과 외적을 이용하여 설명하면,
ˆpˆq = dpdq − (vp · vq)
+dpvq + dqvp + vp × vq
사원수를 스칼라 값과 벡터 표현인 (d, v)로 표현하면,
ˆpˆq = (dp, vp)(dq, vq)
= (dpdq − vp · vq, dpvq + dqvp + vp × vq)
스칼라: 두 사원수가 가진 스칼라 값의 곱에서 두 사원수가 가진 벡터
내적을 뺀 것
벡터: 각 사원수가 가진 스칼라 값을 상대편의 벡터 부분에 곱한 결과 두
개를 더하고, 두 사원수가 가진 벡터를 서로 외적하여 얻는 벡터를 추가로
더하여 얻음
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 8 / 30
사원수의 연산 규칙
ˆp + ˆq = ˆq + ˆp
(ˆp + ˆq) + ˆr = ˆp + (ˆq + ˆr)
λˆp = ˆpλ
−λˆp = λ(−ˆp)
ˆpˆq ̸= ˆqˆp
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 9 / 30
켤레 사원수 1/2
켤레 사원수(공액 사원수, conjugate)
어떤 사원수 ˆp = (dp, vp)의 켤레 사원수를 ˆp∗
라고 표현
이 켤레 이 사원수는 (dp, −vp)의 값을 가짐
ˆp = (dp, vp) ⇒ ˆp∗
= (dp, −vp)
사원수의 크기는 벡터의 크기와 같은 방식으로 구한다.
|ˆq| = dqdq + aqaq + bqbq + cqcq
= d2
q + a2
q + b2
q + c2
q
= d2
q + vTv
= d2
q + v · v
= ˆqˆq∗
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 10 / 30
켤레 사원수 2/2
사원수의 항등원은 ˆi는 (1, 0, 0, 0)
사원수 ˆq의 역원 ˆq−1 은 ˆq∗/|ˆq|
ˆqˆi = ˆiˆq = ˆq
ˆqˆq−1
= ˆq−1
ˆq = ˆqˆq∗
/|q| = ˆi
켤레 사원수의 크기는 서로 동일하다.
|ˆq| = |ˆq∗
|
다음과 같은 연산 규칙도 중요
(ˆq + ˆr)∗
= ˆq∗
+ ˆr∗
(ˆqˆr)∗
= ˆr∗
ˆq∗
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 11 / 30
사원수 연산 법칙 정리
ˆp + ˆq = ˆq + ˆp
(ˆp + ˆq) + ˆr = ˆp + (ˆq + ˆr)
λˆp = ˆpλ
−λˆp = λ(−ˆp)
ˆpˆq ̸= ˆqˆp
ˆp = (dp, vp) =⇒ ˆp∗
= (dp, −vp)
|ˆq| = ˆqˆq∗
ˆqˆi = ˆq =⇒ ˆi = (1, 0, 0, 0)
ˆqˆp = ˆi =⇒ ˆp = ˆq−1
= ˆq∗
/|ˆq|
ˆqˆq−1
= ˆq−1
ˆq = ˆqˆq∗
/|q| = ˆi
|ˆq| = |ˆq∗
|
(ˆq + ˆr)∗
= ˆq∗
+ ˆr∗
(ˆqˆr)∗
= ˆr∗
ˆq∗
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 12 / 30
사원수와 회전: 곱셈
행렬로 표현했던 회전은 사원수를 이용하여 표현 가능
어떤 좌표 p(x, y, z)는 사원수 표현으로는 ˆp = (0, (x, y, z)) = (0, p)
이 좌표에 다음과 같은 사원수 ˆq를 곱하면 어떻게 되는지 보자.
ˆp = (0, p)
ˆq = (cos θ, sin θu), |u| = 1, |ˆq| = 1
벡터 u는 단위벡터 (u가 어떤 방향이나 축을 표현)
ˆp′
= (dp′ , p′
) = ˆqˆp = (− sin θu · p, cos θp + sin θu × p)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 13 / 30
사원수와 회전: 사원수의 벡터가 수직인 경우 1/2
p와 u가 서로 직교하는 경우
p
u
u × p
θ
|p|
|p| cos θ
|p| sin θ
|p| cos θ p
|p|
|p| sin θu×p
|p|
|p| cos θ p
|p| + |p| sin θu×p
|p|
= cos θp + sin θu × p
p′
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 14 / 30
사원수와 회전: 사원수의 벡터가 수직인 경우 2/2
어떤 단위 벡터 u와 임의의 벡터 p는 서로 직교하다고 가정
두 벡터를 외적한 u × p는 p를 u 축을 중심으로 90도 회전한 것
u, p, u × p는 직교 좌표계의 세 축 위
다음과 같은 세 벡터가 직교 좌표축
u, p
|p| , u×p
|p|
p를 u를 중심축으로 θ만큼 회전시킨 점 p′
이 점은 p
|p| 축 방향으로의 길이 α와 u×p
|p| 축 방향으로의 길이 β 를
안다면 α p
|p| + β u×p
|p| 로 표현 가능
α = |p| cos θ
β = |p| sin θ
회전된 좌표 p′ 는 cos θp + sin θu × p
두 사원수의 곱으로 얻은 사원수의 벡터 부분과 동일
스칼라 부분은 u ⊥ p의 경우라면 0
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 15 / 30
사원수와 회전: 일반적 경우 1/7
p와 u가 서로 직교하지 않는 일반적 경우
스칼라 부분 − sin θu · p이 0이 아님
스칼라 값이 0이 될 수 있도록 사원수 곱하기를 두 번 수행
하나의 사원수 ˆq를 곱하는 것이 아니라 그 역원 ˆq−1 도 같이 곱함
ˆp′
= ˆqˆpˆp∗
= (cos θ, sin θu)(0, p)(cos θ, − sin θu)
ˆqˆpˆp∗
= (− sin θu · p, cos θp + sin θu × p)(cos θ, − sin θu)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 16 / 30
사원수와 회전: 일반적 경우 2/7
사원수 곱셈 연산법에 따라 계산하면 다음을 얻는다.
ˆqˆpˆq∗
= (s, v)
s = − sin θ cos θu · p + sin θ cos θu · p + sin2
θ(u × p) · u
v = cos2
θp
+ sin θ cos θu × p
+(sin2
θu · p)u
− sin θ cos θp × u
− sin2
θu × p × u
u × p와 u는 서로 수직이므로, 이 둘의 내적 (u × p) · u이 0이다. 따라서 스칼라
부분인 s가 0.
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 17 / 30
사원수와 회전: 일반적 경우 3/7
u
p
u × p
(u × p) × u
(p · u)u
−(p · u)u
u × p × u는 p − (u · p)u
u × p × u는 u와 u × p에 동시에 수직인 직교축
길이는 p와 u의 내적을 통해 알 수 있고, 이를 u 축의 음의 방향으로
떨어트리면 됨
u × p × u = p − (p · u)u
ˆqˆpˆq∗
= (0, (cos2
θ − sin2
θ)p + 2 sin θ cos θu × p + (2 sin2
θu · p)u)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 18 / 30
사원수와 회전: 일반적 경우 4/7
cos 2θ = cos2
θ − sin2
θ
sin 2θ = 2 sin θ cos θ
이 항등식을 적용하면 다음을 얻을 수 있다.
ˆqˆpˆq∗
= (0, (cos 2θp + sin 2θ(u × p) + (2 sin2
θu · p)u)
1 = cos2 θ + sin2
θ이므로 sin2
θ = 1 − cos2 θ
2 sin2
θ는 sin2
θ + sin2
θ = sin2
θ + 1 − cos2 θ
1 − (cos2 θ − sin2
θ)이므로 다음 성립
2 sin2
θ = 1 − cos 2θ
ˆqˆpˆq∗
= (0, (cos 2θp + sin 2θ(u × p) + ((1 − cos 2θ)u · p)u)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 19 / 30
사원수와 회전: 일반적 경우 5/7
p
u
rotation plane
u × p
θ
sin θu × p
cos θp
u · p
cos θu · p (1 − cos θ)u · p
sin θ(u × p) + cos θp
((1 − cos θ)u · p)u
sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u
p′
: rotated point
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 20 / 30
사원수와 회전: 일반적 경우 6/7
점 p가 축 u를 기준으로 회전
회전 과정에 지나는 곡선이 놓인 회색 평면 = 회전 평면
p와 u × p가 만드는 평면의 원점을 기준을 θ 만큼 회전하여 얻는 점
이 점은 p 축으로의 길이는 |p| cos θ
이 점의 u × p축 방향으로의 길이는 |p| sin θ
sin θ(u × p) + cos θp
이 점을 회전 평면 위로 옮기면 원하는 좌표
회전 평면으로 옮기는 데에 필요한 길이는 (1 − cos θ)u · p
이 길이만큼 u 축으로 옮겨 놓는 벡터는 ((1 − cos θ)u · p)u
회전의 결과 좌표는
p′
= sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 21 / 30
사원수와 회전: 일반적 경우 7/7
p′
= sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u
어떤 점 p를 u 축을 중심으로 θ 만큼 회전하여 p′
를 얻고 싶을 때
ˆp = (0, p)
ˆq = (cos θ
2, sin θ
2u)
ˆp′ = (0, p′) = ˆqˆpˆq∗
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 22 / 30
사원수의 보간
사원수가 회전을 의미한다면, 그래픽스에서 두 사원수를 보간하는
일은 빈번
보간: t = 0에서 ˆq0 이고, t = 1에서 ˆq1 인 사원수 ˆqt 구하기
사원수는 행렬에 비해 보간이 쉽다는 장점
ˆq0 = (s0, u0, v0, w0)
ˆq1 = (s1, u1, v1, w1)
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 23 / 30
사원수의 보간: 단순한 선형보간
간단한 선형보간
ˆqt = (ts1 + (1 − t)s0, tu1 + (1 − t)u0, tv1 + (1 − t)v0, tw1 + (1 − t)w0)
즉, ˆqt = tˆq1 + (1 − t)ˆq0
매우 간단하고 빠르다는 장점
보간이 적용되는 동안 사원수의 길이가 길이가 변하는 단점
o
ˆq0
ˆq1
ˆqt
4D Hypersphere ˆqt
|ˆqt|
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 24 / 30
사원수의 보간: 간단한 개선 방법
사원수가 항상 초구면의 표면에 있도록 그 길이를 조정
ˆqt/|ˆqt|로 정규화
길이는 유지되지만 회전속도는 일정하지 않음
극단적인 상황: ˆq0 와 ˆq1 이 서로 반대 방향
선형 보간하여 얻는 사원수는 t = 0.5가 될 때까지는 초기의 회전각
t = 0.5 시점을 지나면 바로 다음 회전각으로 전환
사원수의 단순한 선형보간으로 얻어지는 각도의 변화와 각속도의 변화
θ ˙θ
t t
θ = cos−1
( ˆqt
|ˆqt| · ˆq0)
t = 0.5
(a) 각도의 변화 (b) 각속도의 변화
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 25 / 30
사원수의 보간: 구면보간(球面補間) 혹은 Slerp
사원수의 보간은 각도 θ가 선형으로 보간되어야 함
구면 보간을 통해 얻어야 하는 사원수 보간의 각도의 변화와 각속도의
변화
θ ˙θ
t t
θ = θdt
˙θ(t) = c
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 26 / 30
구면보간(球面補間): 등각속도 구면보간의 개념
구면보간
시작과 끝 회전을 표현하는 사원수 ˆq0 와 ˆq1 에 적절한 가중치 a(t)와
b(t) 적용
가중치가 적용된 두 사원수를 합성
현재 시간 t에 제한조건을 만족하는 a(t)와 b(t)를 찾는 작업
o
ˆq0
ˆq1
4D Hypersphere
a(t)
b(t)
ˆqt = a(t)ˆq0 + b(t)ˆq1
θt
θd
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 27 / 30
구면보간(球面補間): a(t) 구하기
ˆq0 에서 ˆq1 까지의 회전각 전체가 θd
시간 t에서 보간된 사원수 ˆqt 와 ˆq0 가 이루는 각이 θt
θd 에서 θt 를 뺀 각도를 θ1−t
a(t)와 |ˆq0|의 비(比)는 결국 |ˆqt| sin θ1−t 와 |ˆq0| sin θd 의 비
a(t) = sin θ1−t
sin θd
ˆq0
a(t)
sin θd sin θ1−t
θd
θ1−t
θt
ˆqt
ˆq1
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 28 / 30
구면보간(球面補間): b(t) 구하기
b(t)와 |ˆq1 의 비는 |ˆqt| sin θt 의 값과 |ˆq1| sin θd 가 이루는 비
b(t) = sin θt
sin θd
ˆq0
b(t)
sin θd
sin θt
θd
θ1−t
θt
ˆqt
ˆq1
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 29 / 30
구면보간(球面補間) 계산법
a(t)와 b(t)를 구하고 나면, 보간된 사원수 ˆqt
ˆqt = a(t)ˆq0 + b(t)ˆq1
사원수가 동일한 각속도로 부드럽게 보간된다. 이러한 보간 방법은
구면보간
“slerp”이라는 이름으로 종종 부름
이때 사원수의 크기는 언제나 1
θd = cos−1
(ˆq0 · ˆq1)
s = sin θd = 1 − (ˆq0 · ˆq1)2
ˆqt =
sin θ1−t
s
ˆq0 +
sin θt
s
ˆq1
강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 30 / 30

More Related Content

What's hot

Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方Norishige Fukushima
 
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかるCEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかるTakahito Tejima
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
【Unite Tokyo 2019】2DアーティストのためのGPU入門
【Unite Tokyo 2019】2DアーティストのためのGPU入門【Unite Tokyo 2019】2DアーティストのためのGPU入門
【Unite Tokyo 2019】2DアーティストのためのGPU入門UnityTechnologiesJapan002
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리changehee lee
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현MinGeun Park
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
Deferred shading
Deferred shadingDeferred shading
Deferred shadingFrank Chao
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현민웅 이
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門Toru Matsuoka
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...Gerke Max Preussner
 

What's hot (20)

Compute shader
Compute shaderCompute shader
Compute shader
 
プロシージャル技法による背景の自動生成 『1,000の和室
プロシージャル技法による背景の自動生成 『1,000の和室プロシージャル技法による背景の自動生成 『1,000の和室
プロシージャル技法による背景の自動生成 『1,000の和室
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
複数台のKinectV2の使い方
複数台のKinectV2の使い方複数台のKinectV2の使い方
複数台のKinectV2の使い方
 
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかるCEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
【Unite Tokyo 2019】2DアーティストのためのGPU入門
【Unite Tokyo 2019】2DアーティストのためのGPU入門【Unite Tokyo 2019】2DアーティストのためのGPU入門
【Unite Tokyo 2019】2DアーティストのためのGPU入門
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
Deferred shading
Deferred shadingDeferred shading
Deferred shading
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현제노블레이도 2 ray marching을사용한 구름 표현
제노블레이도 2 ray marching을사용한 구름 표현
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
West Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
 

Viewers also liked

Fast CCL(connected component labeling) with GPU
Fast CCL(connected component labeling) with GPUFast CCL(connected component labeling) with GPU
Fast CCL(connected component labeling) with GPUYoung-Min kang
 
GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수Mark Choi
 
인공지능과 딥러닝에 대한 소개
인공지능과 딥러닝에 대한 소개인공지능과 딥러닝에 대한 소개
인공지능과 딥러닝에 대한 소개Young-Min kang
 
фотоконкурс пошук
фотоконкурс пошукфотоконкурс пошук
фотоконкурс пошукksuha12
 
Beekeeper u creating a content calendar final(1)
Beekeeper u creating a content calendar final(1)Beekeeper u creating a content calendar final(1)
Beekeeper u creating a content calendar final(1)Alex Cummings
 
історичний клуб пошук
історичний клуб пошукісторичний клуб пошук
історичний клуб пошукksuha12
 
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例数学的思考力ゲーム制作を通した低学年生の開発力向上の事例
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例Yoshihiro Kishimoto
 
Tutorial mail merge office 2007
Tutorial mail merge office 2007Tutorial mail merge office 2007
Tutorial mail merge office 2007Billy Buhaiba
 
Avoid six mistakes-maria arrua
Avoid six mistakes-maria arruaAvoid six mistakes-maria arrua
Avoid six mistakes-maria arruaMaria A. Arrua
 
Mortgage rates beginner's_guide-maria arrua
Mortgage rates beginner's_guide-maria arruaMortgage rates beginner's_guide-maria arrua
Mortgage rates beginner's_guide-maria arruaMaria A. Arrua
 
статут пошук
статут пошукстатут пошук
статут пошукksuha12
 
Mortgage industry explained-maria arrua
Mortgage industry explained-maria arruaMortgage industry explained-maria arrua
Mortgage industry explained-maria arruaMaria A. Arrua
 

Viewers also liked (19)

Fast CCL(connected component labeling) with GPU
Fast CCL(connected component labeling) with GPUFast CCL(connected component labeling) with GPU
Fast CCL(connected component labeling) with GPU
 
GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수
 
인공지능과 딥러닝에 대한 소개
인공지능과 딥러닝에 대한 소개인공지능과 딥러닝에 대한 소개
인공지능과 딥러닝에 대한 소개
 
쿼터니언
쿼터니언쿼터니언
쿼터니언
 
фотоконкурс пошук
фотоконкурс пошукфотоконкурс пошук
фотоконкурс пошук
 
Beekeeper u creating a content calendar final(1)
Beekeeper u creating a content calendar final(1)Beekeeper u creating a content calendar final(1)
Beekeeper u creating a content calendar final(1)
 
Aardappelplantbak final
Aardappelplantbak finalAardappelplantbak final
Aardappelplantbak final
 
історичний клуб пошук
історичний клуб пошукісторичний клуб пошук
історичний клуб пошук
 
Seriousgamejam ppt140822koukai
Seriousgamejam ppt140822koukaiSeriousgamejam ppt140822koukai
Seriousgamejam ppt140822koukai
 
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例数学的思考力ゲーム制作を通した低学年生の開発力向上の事例
数学的思考力ゲーム制作を通した低学年生の開発力向上の事例
 
Tutorial mail merge office 2007
Tutorial mail merge office 2007Tutorial mail merge office 2007
Tutorial mail merge office 2007
 
Avoid six mistakes-maria arrua
Avoid six mistakes-maria arruaAvoid six mistakes-maria arrua
Avoid six mistakes-maria arrua
 
Hodgkins Lymphoma
Hodgkins Lymphoma Hodgkins Lymphoma
Hodgkins Lymphoma
 
Mortgage rates beginner's_guide-maria arrua
Mortgage rates beginner's_guide-maria arruaMortgage rates beginner's_guide-maria arrua
Mortgage rates beginner's_guide-maria arrua
 
Powerofgame140902koukai
Powerofgame140902koukaiPowerofgame140902koukai
Powerofgame140902koukai
 
статут пошук
статут пошукстатут пошук
статут пошук
 
Mortgage industry explained-maria arrua
Mortgage industry explained-maria arruaMortgage industry explained-maria arrua
Mortgage industry explained-maria arrua
 
Vanish unwantedthoughts
Vanish unwantedthoughtsVanish unwantedthoughts
Vanish unwantedthoughts
 
Intro to Ravelry
Intro to RavelryIntro to Ravelry
Intro to Ravelry
 

Similar to Quaternion and Rotation

정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장sung ki choi
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 ISungbin Lim
 
Random walk, brownian motion, black scholes equation
Random walk, brownian motion, black scholes equationRandom walk, brownian motion, black scholes equation
Random walk, brownian motion, black scholes equation창호 손
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부Young-Min kang
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection동환 김
 
Spherical Harmonics.pdf
Spherical Harmonics.pdfSpherical Harmonics.pdf
Spherical Harmonics.pdfBongseok Cho
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNNSANG WON PARK
 
Python Machine Learning - ML02 Linear Regression(선형회귀)
Python Machine Learning - ML02 Linear Regression(선형회귀)Python Machine Learning - ML02 Linear Regression(선형회귀)
Python Machine Learning - ML02 Linear Regression(선형회귀)건환 손
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석jaypi Ko
 
2012-12-25 사조사2급실기-공식
2012-12-25 사조사2급실기-공식2012-12-25 사조사2급실기-공식
2012-12-25 사조사2급실기-공식Seok-kyu Kong 공석규
 
선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)AHRA CHO
 
Mathematics
MathematicsMathematics
Mathematicsskku_npc
 
0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vectorJeonghun Yoon
 

Similar to Quaternion and Rotation (20)

정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 I
 
Random walk, brownian motion, black scholes equation
Random walk, brownian motion, black scholes equationRandom walk, brownian motion, black scholes equation
Random walk, brownian motion, black scholes equation
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 
Ray-triangle intersection
Ray-triangle intersectionRay-triangle intersection
Ray-triangle intersection
 
Gmm to vgmm
Gmm to vgmmGmm to vgmm
Gmm to vgmm
 
0207 1 gradient
0207 1 gradient0207 1 gradient
0207 1 gradient
 
Spherical Harmonics.pdf
Spherical Harmonics.pdfSpherical Harmonics.pdf
Spherical Harmonics.pdf
 
점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNN
 
Python Machine Learning - ML02 Linear Regression(선형회귀)
Python Machine Learning - ML02 Linear Regression(선형회귀)Python Machine Learning - ML02 Linear Regression(선형회귀)
Python Machine Learning - ML02 Linear Regression(선형회귀)
 
Taocp1 2 4
Taocp1 2 4Taocp1 2 4
Taocp1 2 4
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
 
2012-12-25 사조사2급실기-공식
2012-12-25 사조사2급실기-공식2012-12-25 사조사2급실기-공식
2012-12-25 사조사2급실기-공식
 
선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)
 
Mathematics
MathematicsMathematics
Mathematics
 
0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector0124 1 linear_algebra_basic_vector
0124 1 linear_algebra_basic_vector
 

More from Young-Min kang

[update] Introductory Parts of the Book "Dive into Deep Learning"
[update] Introductory Parts of the Book "Dive into Deep Learning"[update] Introductory Parts of the Book "Dive into Deep Learning"
[update] Introductory Parts of the Book "Dive into Deep Learning"Young-Min kang
 
물리기반 모델링 기초 - 강의노트
물리기반 모델링 기초 - 강의노트물리기반 모델링 기초 - 강의노트
물리기반 모델링 기초 - 강의노트Young-Min kang
 
Physics for Game: Part1 - Basics
Physics for Game: Part1 - BasicsPhysics for Game: Part1 - Basics
Physics for Game: Part1 - BasicsYoung-Min kang
 
Algorithms summary (English version)
Algorithms summary (English version)Algorithms summary (English version)
Algorithms summary (English version)Young-Min kang
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary koreanYoung-Min kang
 

More from Young-Min kang (9)

[update] Introductory Parts of the Book "Dive into Deep Learning"
[update] Introductory Parts of the Book "Dive into Deep Learning"[update] Introductory Parts of the Book "Dive into Deep Learning"
[update] Introductory Parts of the Book "Dive into Deep Learning"
 
물리기반 모델링 기초 - 강의노트
물리기반 모델링 기초 - 강의노트물리기반 모델링 기초 - 강의노트
물리기반 모델링 기초 - 강의노트
 
Lec gp05 rigidbody2d
Lec gp05 rigidbody2dLec gp05 rigidbody2d
Lec gp05 rigidbody2d
 
Physics for Game: Part1 - Basics
Physics for Game: Part1 - BasicsPhysics for Game: Part1 - Basics
Physics for Game: Part1 - Basics
 
Algorithms summary (English version)
Algorithms summary (English version)Algorithms summary (English version)
Algorithms summary (English version)
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary korean
 
Game Physics Test
Game Physics TestGame Physics Test
Game Physics Test
 
Game salad 07
Game salad 07Game salad 07
Game salad 07
 
Game Salad Study
Game Salad StudyGame Salad Study
Game Salad Study
 

Quaternion and Rotation

  • 1. 게임 수학 강의 노트 05 - 사원수(Quaternion) 강영민 동명대학교 2015년 2학기 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 1 / 30
  • 2. 사원수 사원수(quaternion)는 스칼라(scalar) 값과 3차원 벡터를 묶어 구성한 복소수(complex number) 3차원 벡터 v = (a, b, c)를 각각의 축 방향 단위 벡터인 기저 i, j, k로 표현하면 ai + bj + ck 사원수는 여기에 스칼라 값 d가 추가된 d + ai + bj + ck 기저를 제외하고 표현하면 (d, (a, b, c))와 같이 표현 벡터 기호로 표현하면 (d, v) 스칼라 값은 기저가 실수의 단위 값인 1이라고 이해하면 사원수는 1, i, j, k를 기저로 하는 벡터 로보틱스와 컴퓨터 그래픽스 분야에서 회전을 다루는 데에 빈번히 이용 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 2 / 30
  • 3. 사원수의 연산 - 덧셈과 뺄셈 사원수 덧셈: 성분별로 더하면 된다. 두 개의 사원수 ˆp와 ˆq가 각각 (sp, vp)와 (sq, vq)일 때, 덧셈은 ˆp + ˆq = (sp + sq, vp + vq) ˆp = (ap, bp, cp, dp)와 ˆq = (aq, bq, cq, dq) ˆp + ˆq = (ap + aq, bp + bq, cp + cq, dp + dq) 뺄셈 ˆp − ˆq = (ap − aq, bp − bq, cp − cq, dp − dq) 스칼라와 벡터로 나누어 표현하면 다음과 같다. ˆp = (sp, vp), ˆq = (sq, vq) ˆp + ˆq = (sp − sq, vp − vq) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 3 / 30
  • 4. 사원수의 연산 - 스칼라 곱셈 사원수와 어떤 스칼라 λ를 곱하는 것은 모든 성분에 이 스칼라 값을 곱하는 것이다. λˆp = (λsp, λvp) = (λap, λbp, λcp, λdp) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 4 / 30
  • 5. 사원수의 연산 - 사원수 곱셈 1/4 두 사원수 ˆp와 ˆq를 곱하려면 어떻게 해야 할까? 사원수는 서로 다른 허수 i, j, k를 가진 벡터와 스칼라의 합인 복소수 허수들 사이의 곱 i2 = j2 = k2 = −1 ij = k, jk = i, ki = j ji = −k, kj = −i, ik = −j ˆpˆq는 다음과 같이 표현 가능 ˆp = dp + api + bpj + cpk ˆq = dq + aqi + bqj + cqk ˆpˆq = dpdq + dp + dpaqi + dpbqj + dpcqk + apidq + apiaqi + apibqj + apicqk + bpjdq + bpjaqi + bpjbqj + bpjcqk + cpkdq + cpkaqi + cpkbqj + cpkcqk 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 5 / 30
  • 6. 사원수의 연산 - 사원수 곱셈 2/4 정리하면 다음과 같다. ˆpˆq = dpdq + dpaqi + dpbqj + dpcqk + (1) apdqi + apaqi2 + apbqij + apcqik + bpdqj + bpaqji + bpbqj2 + bpcqjk + cpdqk + cpaqki + cpbqkj + cpcqk2 허수의 곱이 나타나는 부분을 정리하면, ˆpˆq = dpdq + dpaqi + dpbqj + dpcqk + (2) apdqi − apaq + apbqk − apcqj + bpdqj − bpaqk − bpbq + bpcqi + cpdqk + cpaqj − cpbqi − cpcq 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 6 / 30
  • 7. 사원수의 연산 - 사원수 곱셈 3/4 허수별로 정리하면 다음과 같다. ˆpˆq = dpdq − apaq − bpbq − cpcq +dpaqi + apdqi + (bpcq − cpbq)i +dpbqj + bpdqj + (cpaq − apcq)j +dpcqk + cpdqk + (apbq − bpaq)k 계산의 의미는 다음과 같다. ˆpˆq = dpdq − (apaq + bpbq + cpcq) +dp(aqi + bqj + cqk) +dq(api + bpj + cpk) +(bpcq − cpbq)i + (cpaq − apcq)j + (apbq − bpaq)k 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 7 / 30
  • 8. 사원수의 연산 - 사원수 곱셈 4/4 벡터의 내적과 외적을 이용하여 설명하면, ˆpˆq = dpdq − (vp · vq) +dpvq + dqvp + vp × vq 사원수를 스칼라 값과 벡터 표현인 (d, v)로 표현하면, ˆpˆq = (dp, vp)(dq, vq) = (dpdq − vp · vq, dpvq + dqvp + vp × vq) 스칼라: 두 사원수가 가진 스칼라 값의 곱에서 두 사원수가 가진 벡터 내적을 뺀 것 벡터: 각 사원수가 가진 스칼라 값을 상대편의 벡터 부분에 곱한 결과 두 개를 더하고, 두 사원수가 가진 벡터를 서로 외적하여 얻는 벡터를 추가로 더하여 얻음 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 8 / 30
  • 9. 사원수의 연산 규칙 ˆp + ˆq = ˆq + ˆp (ˆp + ˆq) + ˆr = ˆp + (ˆq + ˆr) λˆp = ˆpλ −λˆp = λ(−ˆp) ˆpˆq ̸= ˆqˆp 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 9 / 30
  • 10. 켤레 사원수 1/2 켤레 사원수(공액 사원수, conjugate) 어떤 사원수 ˆp = (dp, vp)의 켤레 사원수를 ˆp∗ 라고 표현 이 켤레 이 사원수는 (dp, −vp)의 값을 가짐 ˆp = (dp, vp) ⇒ ˆp∗ = (dp, −vp) 사원수의 크기는 벡터의 크기와 같은 방식으로 구한다. |ˆq| = dqdq + aqaq + bqbq + cqcq = d2 q + a2 q + b2 q + c2 q = d2 q + vTv = d2 q + v · v = ˆqˆq∗ 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 10 / 30
  • 11. 켤레 사원수 2/2 사원수의 항등원은 ˆi는 (1, 0, 0, 0) 사원수 ˆq의 역원 ˆq−1 은 ˆq∗/|ˆq| ˆqˆi = ˆiˆq = ˆq ˆqˆq−1 = ˆq−1 ˆq = ˆqˆq∗ /|q| = ˆi 켤레 사원수의 크기는 서로 동일하다. |ˆq| = |ˆq∗ | 다음과 같은 연산 규칙도 중요 (ˆq + ˆr)∗ = ˆq∗ + ˆr∗ (ˆqˆr)∗ = ˆr∗ ˆq∗ 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 11 / 30
  • 12. 사원수 연산 법칙 정리 ˆp + ˆq = ˆq + ˆp (ˆp + ˆq) + ˆr = ˆp + (ˆq + ˆr) λˆp = ˆpλ −λˆp = λ(−ˆp) ˆpˆq ̸= ˆqˆp ˆp = (dp, vp) =⇒ ˆp∗ = (dp, −vp) |ˆq| = ˆqˆq∗ ˆqˆi = ˆq =⇒ ˆi = (1, 0, 0, 0) ˆqˆp = ˆi =⇒ ˆp = ˆq−1 = ˆq∗ /|ˆq| ˆqˆq−1 = ˆq−1 ˆq = ˆqˆq∗ /|q| = ˆi |ˆq| = |ˆq∗ | (ˆq + ˆr)∗ = ˆq∗ + ˆr∗ (ˆqˆr)∗ = ˆr∗ ˆq∗ 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 12 / 30
  • 13. 사원수와 회전: 곱셈 행렬로 표현했던 회전은 사원수를 이용하여 표현 가능 어떤 좌표 p(x, y, z)는 사원수 표현으로는 ˆp = (0, (x, y, z)) = (0, p) 이 좌표에 다음과 같은 사원수 ˆq를 곱하면 어떻게 되는지 보자. ˆp = (0, p) ˆq = (cos θ, sin θu), |u| = 1, |ˆq| = 1 벡터 u는 단위벡터 (u가 어떤 방향이나 축을 표현) ˆp′ = (dp′ , p′ ) = ˆqˆp = (− sin θu · p, cos θp + sin θu × p) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 13 / 30
  • 14. 사원수와 회전: 사원수의 벡터가 수직인 경우 1/2 p와 u가 서로 직교하는 경우 p u u × p θ |p| |p| cos θ |p| sin θ |p| cos θ p |p| |p| sin θu×p |p| |p| cos θ p |p| + |p| sin θu×p |p| = cos θp + sin θu × p p′ 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 14 / 30
  • 15. 사원수와 회전: 사원수의 벡터가 수직인 경우 2/2 어떤 단위 벡터 u와 임의의 벡터 p는 서로 직교하다고 가정 두 벡터를 외적한 u × p는 p를 u 축을 중심으로 90도 회전한 것 u, p, u × p는 직교 좌표계의 세 축 위 다음과 같은 세 벡터가 직교 좌표축 u, p |p| , u×p |p| p를 u를 중심축으로 θ만큼 회전시킨 점 p′ 이 점은 p |p| 축 방향으로의 길이 α와 u×p |p| 축 방향으로의 길이 β 를 안다면 α p |p| + β u×p |p| 로 표현 가능 α = |p| cos θ β = |p| sin θ 회전된 좌표 p′ 는 cos θp + sin θu × p 두 사원수의 곱으로 얻은 사원수의 벡터 부분과 동일 스칼라 부분은 u ⊥ p의 경우라면 0 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 15 / 30
  • 16. 사원수와 회전: 일반적 경우 1/7 p와 u가 서로 직교하지 않는 일반적 경우 스칼라 부분 − sin θu · p이 0이 아님 스칼라 값이 0이 될 수 있도록 사원수 곱하기를 두 번 수행 하나의 사원수 ˆq를 곱하는 것이 아니라 그 역원 ˆq−1 도 같이 곱함 ˆp′ = ˆqˆpˆp∗ = (cos θ, sin θu)(0, p)(cos θ, − sin θu) ˆqˆpˆp∗ = (− sin θu · p, cos θp + sin θu × p)(cos θ, − sin θu) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 16 / 30
  • 17. 사원수와 회전: 일반적 경우 2/7 사원수 곱셈 연산법에 따라 계산하면 다음을 얻는다. ˆqˆpˆq∗ = (s, v) s = − sin θ cos θu · p + sin θ cos θu · p + sin2 θ(u × p) · u v = cos2 θp + sin θ cos θu × p +(sin2 θu · p)u − sin θ cos θp × u − sin2 θu × p × u u × p와 u는 서로 수직이므로, 이 둘의 내적 (u × p) · u이 0이다. 따라서 스칼라 부분인 s가 0. 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 17 / 30
  • 18. 사원수와 회전: 일반적 경우 3/7 u p u × p (u × p) × u (p · u)u −(p · u)u u × p × u는 p − (u · p)u u × p × u는 u와 u × p에 동시에 수직인 직교축 길이는 p와 u의 내적을 통해 알 수 있고, 이를 u 축의 음의 방향으로 떨어트리면 됨 u × p × u = p − (p · u)u ˆqˆpˆq∗ = (0, (cos2 θ − sin2 θ)p + 2 sin θ cos θu × p + (2 sin2 θu · p)u) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 18 / 30
  • 19. 사원수와 회전: 일반적 경우 4/7 cos 2θ = cos2 θ − sin2 θ sin 2θ = 2 sin θ cos θ 이 항등식을 적용하면 다음을 얻을 수 있다. ˆqˆpˆq∗ = (0, (cos 2θp + sin 2θ(u × p) + (2 sin2 θu · p)u) 1 = cos2 θ + sin2 θ이므로 sin2 θ = 1 − cos2 θ 2 sin2 θ는 sin2 θ + sin2 θ = sin2 θ + 1 − cos2 θ 1 − (cos2 θ − sin2 θ)이므로 다음 성립 2 sin2 θ = 1 − cos 2θ ˆqˆpˆq∗ = (0, (cos 2θp + sin 2θ(u × p) + ((1 − cos 2θ)u · p)u) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 19 / 30
  • 20. 사원수와 회전: 일반적 경우 5/7 p u rotation plane u × p θ sin θu × p cos θp u · p cos θu · p (1 − cos θ)u · p sin θ(u × p) + cos θp ((1 − cos θ)u · p)u sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u p′ : rotated point 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 20 / 30
  • 21. 사원수와 회전: 일반적 경우 6/7 점 p가 축 u를 기준으로 회전 회전 과정에 지나는 곡선이 놓인 회색 평면 = 회전 평면 p와 u × p가 만드는 평면의 원점을 기준을 θ 만큼 회전하여 얻는 점 이 점은 p 축으로의 길이는 |p| cos θ 이 점의 u × p축 방향으로의 길이는 |p| sin θ sin θ(u × p) + cos θp 이 점을 회전 평면 위로 옮기면 원하는 좌표 회전 평면으로 옮기는 데에 필요한 길이는 (1 − cos θ)u · p 이 길이만큼 u 축으로 옮겨 놓는 벡터는 ((1 − cos θ)u · p)u 회전의 결과 좌표는 p′ = sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 21 / 30
  • 22. 사원수와 회전: 일반적 경우 7/7 p′ = sin θ(u × p) + cos θp + ((1 − cos θ)u · p)u 어떤 점 p를 u 축을 중심으로 θ 만큼 회전하여 p′ 를 얻고 싶을 때 ˆp = (0, p) ˆq = (cos θ 2, sin θ 2u) ˆp′ = (0, p′) = ˆqˆpˆq∗ 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 22 / 30
  • 23. 사원수의 보간 사원수가 회전을 의미한다면, 그래픽스에서 두 사원수를 보간하는 일은 빈번 보간: t = 0에서 ˆq0 이고, t = 1에서 ˆq1 인 사원수 ˆqt 구하기 사원수는 행렬에 비해 보간이 쉽다는 장점 ˆq0 = (s0, u0, v0, w0) ˆq1 = (s1, u1, v1, w1) 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 23 / 30
  • 24. 사원수의 보간: 단순한 선형보간 간단한 선형보간 ˆqt = (ts1 + (1 − t)s0, tu1 + (1 − t)u0, tv1 + (1 − t)v0, tw1 + (1 − t)w0) 즉, ˆqt = tˆq1 + (1 − t)ˆq0 매우 간단하고 빠르다는 장점 보간이 적용되는 동안 사원수의 길이가 길이가 변하는 단점 o ˆq0 ˆq1 ˆqt 4D Hypersphere ˆqt |ˆqt| 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 24 / 30
  • 25. 사원수의 보간: 간단한 개선 방법 사원수가 항상 초구면의 표면에 있도록 그 길이를 조정 ˆqt/|ˆqt|로 정규화 길이는 유지되지만 회전속도는 일정하지 않음 극단적인 상황: ˆq0 와 ˆq1 이 서로 반대 방향 선형 보간하여 얻는 사원수는 t = 0.5가 될 때까지는 초기의 회전각 t = 0.5 시점을 지나면 바로 다음 회전각으로 전환 사원수의 단순한 선형보간으로 얻어지는 각도의 변화와 각속도의 변화 θ ˙θ t t θ = cos−1 ( ˆqt |ˆqt| · ˆq0) t = 0.5 (a) 각도의 변화 (b) 각속도의 변화 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 25 / 30
  • 26. 사원수의 보간: 구면보간(球面補間) 혹은 Slerp 사원수의 보간은 각도 θ가 선형으로 보간되어야 함 구면 보간을 통해 얻어야 하는 사원수 보간의 각도의 변화와 각속도의 변화 θ ˙θ t t θ = θdt ˙θ(t) = c 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 26 / 30
  • 27. 구면보간(球面補間): 등각속도 구면보간의 개념 구면보간 시작과 끝 회전을 표현하는 사원수 ˆq0 와 ˆq1 에 적절한 가중치 a(t)와 b(t) 적용 가중치가 적용된 두 사원수를 합성 현재 시간 t에 제한조건을 만족하는 a(t)와 b(t)를 찾는 작업 o ˆq0 ˆq1 4D Hypersphere a(t) b(t) ˆqt = a(t)ˆq0 + b(t)ˆq1 θt θd 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 27 / 30
  • 28. 구면보간(球面補間): a(t) 구하기 ˆq0 에서 ˆq1 까지의 회전각 전체가 θd 시간 t에서 보간된 사원수 ˆqt 와 ˆq0 가 이루는 각이 θt θd 에서 θt 를 뺀 각도를 θ1−t a(t)와 |ˆq0|의 비(比)는 결국 |ˆqt| sin θ1−t 와 |ˆq0| sin θd 의 비 a(t) = sin θ1−t sin θd ˆq0 a(t) sin θd sin θ1−t θd θ1−t θt ˆqt ˆq1 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 28 / 30
  • 29. 구면보간(球面補間): b(t) 구하기 b(t)와 |ˆq1 의 비는 |ˆqt| sin θt 의 값과 |ˆq1| sin θd 가 이루는 비 b(t) = sin θt sin θd ˆq0 b(t) sin θd sin θt θd θ1−t θt ˆqt ˆq1 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 29 / 30
  • 30. 구면보간(球面補間) 계산법 a(t)와 b(t)를 구하고 나면, 보간된 사원수 ˆqt ˆqt = a(t)ˆq0 + b(t)ˆq1 사원수가 동일한 각속도로 부드럽게 보간된다. 이러한 보간 방법은 구면보간 “slerp”이라는 이름으로 종종 부름 이때 사원수의 크기는 언제나 1 θd = cos−1 (ˆq0 · ˆq1) s = sin θd = 1 − (ˆq0 · ˆq1)2 ˆqt = sin θ1−t s ˆq0 + sin θt s ˆq1 강영민 (동명대학교) 게임수학 - 사원수 2015년 2학기 30 / 30