mirror of
https://gitlab.com/MisterBiggs/astro-helper.git
synced 2025-06-16 07:06:43 +00:00
added quaternion from ypr
This commit is contained in:
parent
a10e6399b1
commit
9a1cfd433f
@ -8,7 +8,8 @@ struct Quaternion
|
||||
Quaternion(q) = Quaternion(q[1], q[2], q[3], q[4])
|
||||
Quaternion() = new(0, 0, 0, 1)
|
||||
|
||||
# Quaternion(ē, ϕ) = Quaternion(vcat(if sum(ē) == 0 ? [0 0 0] : ē / norm(ē) * sin(ϕ / 2),cos(ϕ / 2)))
|
||||
Quaternion(yaw, pitch, roll) = Quaternion([0 0 sin(yaw / 2) cos(yaw / 2)]) * Quaternion([0 sin(pitch / 2) 0 cos(pitch / 2)]) * Quaternion([sin(roll / 2) 0 0 cos(roll / 2)])
|
||||
|
||||
function Quaternion(ē, ϕ)
|
||||
if sum(ē) == 0
|
||||
return Quaternion([0 0 0 cos(ϕ / 2)])
|
||||
@ -40,6 +41,6 @@ Base.isapprox(a::Quaternion,b::Quaternion) = isapprox(collect(a), collect(b))
|
||||
|
||||
LinearAlgebra.norm(q::Quaternion) = norm(collect(q))
|
||||
LinearAlgebra.normalize(q::Quaternion) = collect(q) / norm(q)
|
||||
# q = Quaternion([1,-2,2], -2 * pi / 3) * Quaternion([0,0,0,1])
|
||||
|
||||
# println(q[3])
|
||||
|
||||
export Quaternion
|
||||
|
@ -1,12 +1,21 @@
|
||||
using AstroHelper
|
||||
using Test
|
||||
|
||||
import AstroHelper: Quaternion
|
||||
import AstroHelper
|
||||
|
||||
@testset "Quaternion Initialization" begin
|
||||
@test Quaternion().r == 1.0
|
||||
@test Quaternion([0,0,0,1]) == Quaternion(0, 0, 0, 1)
|
||||
@test Quaternion([0 0 0], 0) == Quaternion(0, 0, 0, 1)
|
||||
@test Quaternion([0,0,0,1]) == Quaternion()
|
||||
@test Quaternion([0 0 0], 0) == Quaternion()
|
||||
@test Quaternion([1 -2 2], (-2 * pi / 3)) ≈ Quaternion([-sqrt(3) / 6, sqrt(3) / 3, -sqrt(3) / 3, 1 / 2])
|
||||
|
||||
# Roll of pi/2
|
||||
@test Quaternion(0, 0, pi / 2) ≈ Quaternion([1 0 0], pi / 2)
|
||||
|
||||
@test_throws ErrorException Quaternion(1, 2, 3, 4)
|
||||
end
|
||||
|
||||
@testset "Quaternion Math" begin
|
||||
# Quaternion Multiplication is not Communitive.
|
||||
# @test Quaternion() * Quaternion([0 1 0 0]) != Quaternion([0 1 0 0]) * Quaternion()
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user