From 9a1cfd433fc5274fe07ebe33d7b8e409e3297ee6 Mon Sep 17 00:00:00 2001 From: Anson Date: Wed, 20 Jan 2021 21:31:12 -0700 Subject: [PATCH] added quaternion from ypr --- src/Quaternions.jl | 7 ++++--- test/runtests.jl | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Quaternions.jl b/src/Quaternions.jl index 5fb7efd..5641819 100644 --- a/src/Quaternions.jl +++ b/src/Quaternions.jl @@ -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]) \ No newline at end of file + +export Quaternion diff --git a/test/runtests.jl b/test/runtests.jl index b86de1d..7a162f4 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -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 \ No newline at end of file