JuliaGeometry / Rotations.jl

Julia implementations for different rotation parameterizations
https://juliageometry.github.io/Rotations.jl
MIT License
176 stars 44 forks source link

Add more `rotation_between` methods for general dimensions #256

Closed hyrodium closed 1 year ago

hyrodium commented 1 year ago
julia> using StaticArrays

julia> rotation_between(SVector(1,2,3,5),SVector(1,3,2,5))  # Can be `Rotation{4}`
ERROR: DimensionMismatch: No precise constructor for SVector{3} found. Size of input was (4,).
Stacktrace:
 [1] _no_precise_size(SA::Type, x::SVector{4, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:157
 [2] length_match_size(#unused#::Type{SVector{3}}, x::SVector{4, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:125
 [3] adapt_size(#unused#::Type{SVector{3}}, x::SVector{4, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:94
 [4] construct_type(#unused#::Type{SVector{3}}, x::SVector{4, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:87
 [5] StaticArray
   @ ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:166 [inlined]
 [6] rotation_between(from::SVector{4, Int64}, to::SVector{4, Int64})
   @ Rotations ~/.julia/packages/Rotations/qfW3h/src/unitquaternion.jl:320
 [7] top-level scope
   @ REPL[19]:1

julia> rotation_between(SVector(3,1),SVector(1,3))  # Can be `Rotation{2}`
ERROR: DimensionMismatch: No precise constructor for SVector{3} found. Size of input was (2,).
Stacktrace:
 [1] _no_precise_size(SA::Type, x::SVector{2, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:157
 [2] length_match_size(#unused#::Type{SVector{3}}, x::SVector{2, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:125
 [3] adapt_size(#unused#::Type{SVector{3}}, x::SVector{2, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:94
 [4] construct_type(#unused#::Type{SVector{3}}, x::SVector{2, Int64})
   @ StaticArrays ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:87
 [5] StaticArray
   @ ~/.julia/packages/StaticArrays/VLqRb/src/convert.jl:166 [inlined]
 [6] rotation_between(from::SVector{2, Int64}, to::SVector{2, Int64})
   @ Rotations ~/.julia/packages/Rotations/qfW3h/src/unitquaternion.jl:320
 [7] top-level scope
   @ REPL[20]:1

After this change, rotation_betewwn(::Vector, ::Vector) should be removed for consistency and type-stability.