Quaternion
Tensorial.Quaternion — TypeQuaternion represents $q_w + q_x \bm{i} + q_y \bm{j} + q_z \bm{k}$. The salar part and vector part can be accessed by q.scalar and q.vector, respectively.
Examples
julia> Quaternion(1,2,3,4)
1 + 2𝙞 + 3𝙟 + 4𝙠
julia> Quaternion(1)
1 + 0𝙞 + 0𝙟 + 0𝙠
julia> Quaternion(Vec(1,2,3))
0 + 1𝙞 + 2𝙟 + 3𝙠See also quaternion.
Base.exp — Methodexp(::Quaternion)Compute the exponential of quaternion as
\[\exp(q) = e^{q_w} \left( \cos\| \bm{v} \| + \frac{\bm{v}}{\| \bm{v} \|} \sin\| \bm{v} \| \right)\]
Base.log — Methodlog(::Quaternion)Compute the logarithm of quaternion as
\[\ln(q) = \ln\| q \| + \frac{\bm{v}}{\| \bm{v} \|} \arccos\frac{q_w}{\| q \|}\]
Tensorial.quaternion — Methodquaternion(θ, n::Vec; normalize = true)Construct Quaternion from angle θ and axis n as
\[q = \cos\frac{\theta}{2} + \bm{n} \sin\frac{\theta}{2}\]
The constructed quaternion is normalized such as norm(q) ≈ 1 by default.
Examples
julia> q = quaternion(π/4, Vec(0,0,1))
0.9238795325112867 + 0.0𝙞 + 0.0𝙟 + 0.3826834323650898𝙠
julia> x = rand(Vec{3})
3-element Vec{3, Float64}:
 0.32597672886359486
 0.5490511363155669
 0.21858665481883066
julia> (q * x / q).vector ≈ rotmatz(π/4) * x
trueTensorial.rotate — Methodrotate(x::Vec, q::Quaternion)Rotate x by quaternion q.
Examples
julia> v = Vec(1.0, 0.0, 0.0)
3-element Vec{3, Float64}:
 1.0
 0.0
 0.0
julia> rotate(v, quaternion(π/4, Vec(0,0,1)))
3-element Vec{3, Float64}:
 0.7071067811865475
 0.7071067811865476
 0.0Tensorial.rotmat — Methodrotmat(::Quaternion)Construct rotation matrix from quaternion.
Examples
julia> q = quaternion(π/4, Vec(0,0,1))
0.9238795325112867 + 0.0𝙞 + 0.0𝙟 + 0.3826834323650898𝙠
julia> rotmat(q)
3×3 Tensor{Tuple{3, 3}, Float64, 2, 9}:
 0.707107  -0.707107  0.0
 0.707107   0.707107  0.0
 0.0        0.0       1.0