From 9ae3403b18bd0b16a05e1af277a8b79d73516666 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 1 Sep 2022 16:25:11 +0200 Subject: [PATCH] feat: trigonometric functions on quantities support added --- src/core/include/units/math.h | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/core/include/units/math.h b/src/core/include/units/math.h index 3c67e945..47bc49e0 100644 --- a/src/core/include/units/math.h +++ b/src/core/include/units/math.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -339,4 +340,54 @@ template return type(hypot(xx.number(), yy.number(), zz.number())); } + +template +[[nodiscard]] inline dimensionless sin(const angle& q) noexcept + requires requires { sin(q.number()); } || requires { std::sin(q.number()); } +{ + using std::sin; + return sin(quantity_cast(q).number()); +} + +template +[[nodiscard]] inline dimensionless cos(const angle& q) noexcept + requires requires { cos(q.number()); } || requires { std::cos(q.number()); } +{ + using std::cos; + return cos(quantity_cast(q).number()); +} + +template +[[nodiscard]] inline dimensionless tan(const angle& q) noexcept + requires requires { tan(q.number()); } || requires { std::tan(q.number()); } +{ + using std::tan; + return tan(quantity_cast(q).number()); +} + + +template +[[nodiscard]] inline angle asin(const dimensionless& q) noexcept + requires requires { asin(q.number()); } || requires { std::asin(q.number()); } +{ + using std::asin; + return angle(asin(quantity_cast(q).number())); +} + +template +[[nodiscard]] inline angle acos(const dimensionless& q) noexcept + requires requires { acos(q.number()); } || requires { std::acos(q.number()); } +{ + using std::acos; + return angle(acos(quantity_cast(q).number())); +} + +template +[[nodiscard]] inline angle atan(const dimensionless& q) noexcept + requires requires { atan(q.number()); } || requires { std::atan(q.number()); } +{ + using std::atan; + return angle(atan(quantity_cast(q).number())); +} + } // namespace units