정규화된 시간 t 에 대해, qstart 에서 qend 까지 선형보간(linear interoplation)합니다. 결과는 $q_{start}\cdot(1-t) + q_{end}\cdot t$ 이며, 정규화(normalize)한 후에 out 에 담아 돌려줍니다. 단순히 두 4차원 점들을 선형보간한 후, 크기가 $1$ 이 되도록 정규화시키는 것이기에 보간의 속도가 일정하지 않습니다.

nlerp() 는 항상 최단 경로(shortest path)로 회전을 보간하려고 하며, qstart , qend 가 다른 반구(hemi-sphere) 위의 벡터라면, qend 의 부호를 뒤집습니다. 이를 판단하기 위해 내적 $\langle q_{start}, \;q_{end}\rangle$ 이 사용됩니다. 자세한 내용은 Quaternion.dot() 을 읽어보시길 바랍니다.

참고로 nlerp()Normalize Linear intERPolation 의 약자입니다. 하지만 일반적으로 사원수의 lerp 라고 써도, 단순 선형보간이 아닌 normalize linear interpolation 을 의미한다고 보시면 됩니다.

Syntax

Quaternion.nlerp(qstart, qend, t)
Quaternion.nlerp(qstart, qend, t, out)

Parameters

qstart

qend

목표로 하는 회전을 나타내는 Quaternion.

t

경과한 시간(normalizedTime)을 나타내는 number . 항상 $[0, 1]$ 범위의 값이어야 합니다. $t = 0$ 이라면 결과는 qstart 이며, $t = 1$ 이라면 결과는 qend 가 됩니다.

out

결과를 담을 Quaternion . 인자를 주지 않으면 임시 변수를 생성합니다.

Return value

두 사원수를 선형보간한 결과 $q_{start}\cdot(1-t) + q_{end}\cdot t$ 를 나타내는 Quaternion . out 인자를 주었다면 out 에 결과를 담아 돌려줍니다.

Description

사원수는 1개의 스칼라와 3개의 허수로 이루어져있기에, $a + bi + cj + dk$ 로 나타낼 수 있었습니다. Quaternion.mulQuat() 에서는 계산의 편의를 위해, 허수부인 $bi + cj + dk$ 를 3차원 벡터 $\vec{v} = (b, c, d)$ 로 나타냈었죠 (허수부와 스칼라부는 더이상 계산할 수 없으니까요!)