diff --git a/libs/geom/include/psemek/geom/quaternion.hpp b/libs/geom/include/psemek/geom/quaternion.hpp index c5199419..c1ee3288 100644 --- a/libs/geom/include/psemek/geom/quaternion.hpp +++ b/libs/geom/include/psemek/geom/quaternion.hpp @@ -224,6 +224,20 @@ namespace psemek::geom return {res[0], res[1], res[2]}; } + // v0 & v1 assumed to be normalized + template + quaternion shortest_arc(vector const & v0, vector const & v1) + { + auto axis = cross(v0, v1); + quaternion result; + result[0] = axis[0]; + result[1] = axis[1]; + result[2] = axis[2]; + result[3] = T{1} + dot(v0, v1); + result.coords = normalized(result.coords); + return result; + } + template T angle(quaternion const & q0, quaternion const & q1) {