Fix logarithm of a real quaternion

Former-commit-id: a82a1cd462014e7eeadc127061328b45f1e00ec2
This commit is contained in:
Marek Nečada 2019-02-25 05:11:08 +00:00
parent e120464046
commit d11ce9e8ee
1 changed files with 11 additions and 4 deletions

View File

@ -106,11 +106,18 @@ static inline qpms_quat_t qpms_quat_normalise(qpms_quat_t q) {
/// Logarithm of a quaternion. /// Logarithm of a quaternion.
static inline qpms_quat_t qpms_quat_log(const qpms_quat_t q) { static inline qpms_quat_t qpms_quat_log(const qpms_quat_t q) {
const double n = qpms_quat_norm(q); const double n = qpms_quat_norm(q);
const double imnorm = qpms_quat_imnorm(q);
if (imnorm != 0.) {
const double vc = acos(creal(q.a)/n) / qpms_quat_imnorm(q); const double vc = acos(creal(q.a)/n) / qpms_quat_imnorm(q);
const qpms_quat_t r = {log(n) + cimag(q.a)*vc*I, const qpms_quat_t r = {log(n) + cimag(q.a)*vc*I,
q.b*vc}; q.b*vc};
return r; return r;
} }
else {
const qpms_quat_t r = {log(n), 0};
return r;
}
}
/// Quaternion power to a real exponent. /// Quaternion power to a real exponent.
static inline qpms_quat_t qpms_quat_pow(const qpms_quat_t q, const double exponent) { static inline qpms_quat_t qpms_quat_pow(const qpms_quat_t q, const double exponent) {