// ===================================================================================================================== // fennec, a free and open source game engine // Copyright © 2025 Medusa Slockbower // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ===================================================================================================================== #ifndef FENNEC_MATH_EXT_TRIGONOMETRIC_H #define FENNEC_MATH_EXT_TRIGONOMETRIC_H #include namespace fennec { // Angle Conversions =================================================================================================== #ifndef FENNEC_DOXYGEN template constexpr qua radians(const qua& degrees) { return qua(degrees * 0.01745329251994329576923690768489); } template constexpr qua degrees(const qua& radians) { return qua(radians * 57.29577951308232087679815481410517); } // Trigonometric Functions ============================================================================================= template constexpr qua sin(const qua& x) { return qua( fennec::sin(x.w), fennec::sin(x.x), fennec::sin(x.y), fennec::sin(x.z) ); } template constexpr qua cos(const qua& x) { return qua( fennec::cos(x.w), fennec::cos(x.x), fennec::cos(x.y), fennec::cos(x.z) ); } template constexpr qua tan(const qua& x) { return qua( fennec::tan(x.w), fennec::tan(x.x), fennec::tan(x.y), fennec::tan(x.z) ); } template constexpr qua asin(const qua& x) { return qua( fennec::asin(x.w), fennec::asin(x.x), fennec::asin(x.y), fennec::asin(x.z) ); } template constexpr qua acos(const qua& x) { return qua( fennec::acos(x.w), fennec::acos(x.x), fennec::acos(x.y), fennec::acos(x.z) ); } template constexpr qua atan(const qua& x) { return qua( fennec::atan(x.w), fennec::atan(x.x), fennec::atan(x.y), fennec::atan(x.z) ); } // Hyperbolic Functions ================================================================================================ template constexpr qua sinh(const qua& x) { return qua( fennec::sinh(x.w), fennec::sinh(x.x), fennec::sinh(x.y), fennec::sinh(x.z) ); } template constexpr qua cosh(const qua& x) { return qua( fennec::cosh(x.w), fennec::cosh(x.x), fennec::cosh(x.y), fennec::cosh(x.z) ); } template constexpr qua tanh(const qua& x) { return qua( fennec::tanh(x.w), fennec::tanh(x.x), fennec::tanh(x.y), fennec::tanh(x.z) ); } template constexpr qua asinh(const qua& x) { return qua( fennec::asinh(x.w), fennec::asinh(x.x), fennec::asinh(x.y), fennec::asinh(x.z) ); } template constexpr qua acosh(const qua& x) { return qua( fennec::acosh(x.w), fennec::acosh(x.x), fennec::acosh(x.y), fennec::acosh(x.z) ); } template constexpr qua atanh(const qua& x) { return qua( fennec::atanh(x.w), fennec::atanh(x.x), fennec::atanh(x.y), fennec::atanh(x.z) ); } #endif } #endif // FENNEC_MATH_EXT_TRIGONOMETRIC_H