mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-16 14:11:28 +07:00
basic qua ext rotation functions
This commit is contained in:
@@ -662,3 +662,57 @@ namespace vmath_hpp
|
||||
return dot(v, normal) / length2(normal) * normal;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Quaternion Transform
|
||||
//
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
// qrotate
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate(T angle, const vec<T, 3>& axis) {
|
||||
const auto [s, c] = sincos(angle * T(0.5));
|
||||
const auto [x, y, z] = normalize(axis);
|
||||
return {vec{x,y,z} * s, c};
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate(const qua<T>& q, T angle, const vec<T, 3>& axis) {
|
||||
return q * qrotate(angle, axis);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_x(T angle) {
|
||||
const auto [s, c] = sincos(angle * T(0.5));
|
||||
return {s, T(0), T(0), c};
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_x(const qua<T>& q, T angle) {
|
||||
return qrotate(q, angle, unit3_x<T>);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_y(T angle) {
|
||||
const auto [s, c] = sincos(angle * T(0.5));
|
||||
return {T(0), s, T(0), c};
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_y(const qua<T>& q, T angle) {
|
||||
return qrotate(q, angle, unit3_y<T>);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_z(T angle) {
|
||||
const auto [s, c] = sincos(angle * T(0.5));
|
||||
return {T(0), T(0), s, c};
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] qua<T> qrotate_z(const qua<T>& q, T angle) {
|
||||
return qrotate(q, angle, unit3_z<T>);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,3 +226,24 @@ namespace vmath_hpp
|
||||
return not_equal_to(vec{xs}, vec{ys});
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Quaternion Functions
|
||||
//
|
||||
|
||||
namespace vmath_hpp
|
||||
{
|
||||
// conjugate
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> conjugate(const qua<T>& q) {
|
||||
return {-q.v, q.s};
|
||||
}
|
||||
|
||||
// inverse
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> inverse(const qua<T>& q) {
|
||||
return conjugate(q) * rcp(dot(q, q));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user