mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-01 19:34:29 +02:00
feat: trigonometric functions on quantities support added
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <units/bits/dimension_op.h>
|
||||
#include <units/bits/external/hacks.h>
|
||||
#include <units/generic/angle.h>
|
||||
#include <units/generic/dimensionless.h>
|
||||
#include <units/quantity.h>
|
||||
#include <units/unit.h>
|
||||
@@ -339,4 +340,54 @@ template<Quantity Q1, Quantity Q2, Quantity Q3>
|
||||
return type(hypot(xx.number(), yy.number(), zz.number()));
|
||||
}
|
||||
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline dimensionless<one, Rep> sin(const angle<U, Rep>& q) noexcept
|
||||
requires requires { sin(q.number()); } || requires { std::sin(q.number()); }
|
||||
{
|
||||
using std::sin;
|
||||
return sin(quantity_cast<radian>(q).number());
|
||||
}
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline dimensionless<one, Rep> cos(const angle<U, Rep>& q) noexcept
|
||||
requires requires { cos(q.number()); } || requires { std::cos(q.number()); }
|
||||
{
|
||||
using std::cos;
|
||||
return cos(quantity_cast<radian>(q).number());
|
||||
}
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline dimensionless<one, Rep> tan(const angle<U, Rep>& q) noexcept
|
||||
requires requires { tan(q.number()); } || requires { std::tan(q.number()); }
|
||||
{
|
||||
using std::tan;
|
||||
return tan(quantity_cast<radian>(q).number());
|
||||
}
|
||||
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline angle<radian, Rep> asin(const dimensionless<U, Rep>& q) noexcept
|
||||
requires requires { asin(q.number()); } || requires { std::asin(q.number()); }
|
||||
{
|
||||
using std::asin;
|
||||
return angle<radian, Rep>(asin(quantity_cast<one>(q).number()));
|
||||
}
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline angle<radian, Rep> acos(const dimensionless<U, Rep>& q) noexcept
|
||||
requires requires { acos(q.number()); } || requires { std::acos(q.number()); }
|
||||
{
|
||||
using std::acos;
|
||||
return angle<radian, Rep>(acos(quantity_cast<one>(q).number()));
|
||||
}
|
||||
|
||||
template<typename U, typename Rep>
|
||||
[[nodiscard]] inline angle<radian, Rep> atan(const dimensionless<U, Rep>& q) noexcept
|
||||
requires requires { atan(q.number()); } || requires { std::atan(q.number()); }
|
||||
{
|
||||
using std::atan;
|
||||
return angle<radian, Rep>(atan(quantity_cast<one>(q).number()));
|
||||
}
|
||||
|
||||
} // namespace units
|
||||
|
Reference in New Issue
Block a user