1
0
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:
Anson 2021-01-20 21:31:12 -07:00
parent a10e6399b1
commit 9a1cfd433f
2 changed files with 16 additions and 6 deletions

View File

@ -8,7 +8,8 @@ struct Quaternion
Quaternion(q) = Quaternion(q[1], q[2], q[3], q[4]) Quaternion(q) = Quaternion(q[1], q[2], q[3], q[4])
Quaternion() = new(0, 0, 0, 1) 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(, ϕ) function Quaternion(, ϕ)
if sum() == 0 if sum() == 0
return Quaternion([0 0 0 cos(ϕ / 2)]) 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.norm(q::Quaternion) = norm(collect(q))
LinearAlgebra.normalize(q::Quaternion) = collect(q) / norm(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

View File

@ -1,12 +1,21 @@
using AstroHelper using AstroHelper
using Test using Test
import AstroHelper: Quaternion import AstroHelper
@testset "Quaternion Initialization" begin @testset "Quaternion Initialization" begin
@test Quaternion().r == 1.0 @test Quaternion().r == 1.0
@test Quaternion([0,0,0,1]) == Quaternion(0, 0, 0, 1) @test Quaternion([0,0,0,1]) == Quaternion()
@test Quaternion([0 0 0], 0) == Quaternion(0, 0, 0, 1) @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]) @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) @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 end