PlayRho  2.0.0
An interactive physics engine & library.
Math.hpp File Reference

Conventional and custom math related code. More...

#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdlib>
#include <limits>
#include <numeric>
#include <type_traits>
#include <vector>
#include <playrho/Matrix.hpp>
#include <playrho/NonNegative.hpp>
#include <playrho/Real.hpp>
#include <playrho/Span.hpp>
#include <playrho/Units.hpp>
#include <playrho/Vector.hpp>
#include <playrho/Vector2.hpp>
#include <playrho/Vector3.hpp>
Include dependency graph for Math.hpp:
This graph shows which files directly or indirectly include this file:

Namespaces

 playrho
 

Functions

template<typename T >
constexpr auto playrho::AlmostEqual (T a, T b, int ulp=4) -> std::enable_if_t< IsArithmeticV< T >, bool >
 Determines whether the given two values are "almost equal". More...
 
template<typename T >
constexpr auto playrho::AlmostZero (const T &value) -> decltype(abs(value)< std::numeric_limits< T >::min())
 Gets whether a given value is almost zero. More...
 
template<typename T >
auto playrho::Atan2 (T y, T x)
 Computes the arc-tangent of the given y and x values. More...
 
template<typename T >
auto playrho::Average (const T &span)
 Computes the average of the given values.
 
template<typename T >
constexpr auto playrho::Bisect (const T &a1, const T &a2) -> decltype((a1+a2)/2)
 Bisection method. More...
 
template<class T >
constexpr auto playrho::cfloor (T v) noexcept
 Constant expression enhanced floor function. More...
 
Length2 playrho::ComputeCentroid (const Span< const Length2 > &vertices)
 Computes the centroid of a counter-clockwise array of 3 or more vertices. More...
 
template<class T1 , class T2 , std::enable_if_t< std::tuple_size_v< T1 >==2 &&std::tuple_size_v< T2 >==2, int > = 0>
constexpr auto playrho::Cross (const T1 &a, const T2 &b) noexcept
 Performs the 2-element analog of the cross product of two vectors. More...
 
template<class T >
constexpr auto playrho::ctrunc (T v) noexcept
 Constant expression enhanced truncate function. More...
 
template<typename T1 , typename T2 >
constexpr auto playrho::Dot (const T1 &a, const T2 &b) noexcept
 Performs the dot product on two vectors (A and B). More...
 
template<class T >
Angle playrho::GetAngle (const Vector2< T > &value)
 Gets the angle. More...
 
NonNegativeFF< Area > playrho::GetAreaOfCircle (Length radius)
 Gets the area of a circle.
 
NonNegativeFF< Area > playrho::GetAreaOfPolygon (const Span< const Length2 > &vertices)
 Gets the area of a polygon. More...
 
std::vector< Length2 > playrho::GetCircleVertices (Length radius, std::size_t slices, Angle start=0_deg, Real turns=Real(1))
 Gets the vertices for a circle described by the given parameters.
 
constexpr Angle playrho::GetFwdRotationalAngle (const Angle &a1, const Angle &a2) noexcept
 Gets the forward/clockwise rotational angle to go from angle 1 to angle 2. More...
 
constexpr auto playrho::GetInverse22 (const Mat33 &value) noexcept -> Mat33
 Gets the inverse of the given matrix as a 2-by-2. More...
 
template<typename T >
auto playrho::GetMagnitude (const T &value) noexcept(noexcept(sqrt(GetMagnitudeSquared(value)))) -> decltype(sqrt(GetMagnitudeSquared(value)))
 Gets the magnitude of the given value. More...
 
template<typename T >
constexpr auto playrho::GetMagnitudeSquared (const T &value) noexcept
 Gets the square of the magnitude of the given iterable value. More...
 
template<typename T >
constexpr auto playrho::GetModuloNext (T value, const T count) noexcept -> decltype(++value,(value< count)? value:static_cast< T >(0), T())
 Gets the modulo next value. More...
 
template<typename T >
constexpr auto playrho::GetModuloPrev (const T value, const T count) noexcept -> decltype((value ? value :count) - static_cast< T >(1), T())
 Gets the modulo previous value. More...
 
Angle playrho::GetNormalized (Angle value) noexcept
 Gets the "normalized" value of the given angle. More...
 
SecondMomentOfArea playrho::GetPolarMoment (const Span< const Length2 > &vertices)
 Gets the polar moment of the area enclosed by the given vertices. More...
 
constexpr Angle playrho::GetRevRotationalAngle (const Angle &a1, const Angle &a2) noexcept
 Gets the reverse (counter) clockwise rotational angle to go from angle 1 to angle 2. More...
 
Angle playrho::GetShortestDelta (Angle a0, Angle a1) noexcept
 Gets the shortest angular distance to go from angle 0 to angle 1. More...
 
constexpr auto playrho::GetSymInverse33 (const Mat33 &value) noexcept -> Mat33
 Gets the symmetric inverse of this matrix as a 3-by-3. More...
 
constexpr Vec2 playrho::InverseTransform (const Vec2 &v, const Mat22 &A) noexcept
 
template<class IN_TYPE >
constexpr auto playrho::Invert (const Matrix22< IN_TYPE > &value) noexcept
 Inverts the given value.
 
template<typename T >
constexpr auto playrho::IsOdd (const T &val) -> decltype((val % 2) !=T{})
 Is-odd. More...
 
template<typename T >
constexpr auto playrho::IsPowerOfTwo (const T &n) -> decltype(n &&!(n &(n - 1)))
 Reports whether or not the given value is a power of two.
 
template<typename T >
constexpr auto playrho::MakeUnsigned (const T &arg) noexcept -> std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T >>
 Makes the given value into an unsigned value. More...
 
template<typename T >
auto playrho::ModuloViaFmod (T dividend, T divisor)
 Modulo operation using std::fmod. More...
 
template<typename T >
auto playrho::ModuloViaTrunc (T dividend, T divisor) noexcept
 Modulo operation using std::trunc. More...
 
constexpr Mat22 playrho::MulT (const Mat22 &A, const Mat22 &B) noexcept
 Computes A^T * B.
 
template<typename T >
constexpr auto playrho::NextPowerOfTwo (T x) -> decltype((x|(x >> 1u)), T(++x))
 Gets the next largest power of 2. More...
 
Real playrho::Normalize (Vec2 &vector)
 Converts the given vector into a unit vector and returns its original length.
 
template<typename T >
auto playrho::RoundOff (const T &value, unsigned precision=DefaultRoundOffPrecission) -> decltype(round(value *static_cast< T >(precision))/static_cast< T >(precision))
 Computes the rounded value of the given value.
 
auto playrho::RoundOff (const Vec2 &value, std::uint32_t precision=DefaultRoundOffPrecission) -> Vec2
 Computes the rounded value of the given value. More...
 
template<typename T , typename U >
constexpr auto playrho::Secant (const T &target, const U &a1, const T &s1, const U &a2, const T &s2) -> decltype(a1+(target - s1) *(a2 - a1)/(s2 - s1))
 Secant method. More...
 
template<typename T , typename U >
constexpr auto playrho::Solve (const Matrix22< U > &mat, const Vector2< T > &b) noexcept
 Solves A * x = b, where b is a column vector. More...
 
template<typename T >
constexpr auto playrho::Solve22 (const Mat33 &mat, const Vector2< T > &b) noexcept -> Vector2< T >
 Solves A * x = b, where b is a column vector. More...
 
template<typename T >
constexpr auto playrho::Solve33 (const Mat33 &mat, const Vector3< T > &b) noexcept -> Vector3< T >
 Solves A * x = b, where b is a column vector. More...
 
template<class T >
constexpr auto playrho::Square (T t) noexcept(noexcept(t *t)) -> decltype(t *t)
 Squares the given value.
 
template<class T >
constexpr auto playrho::ToSigned (const T &value) -> decltype(static_cast< std::make_signed_t< T >>(value))
 Converts the given value to its closest signed equivalent.
 
constexpr Vec2 playrho::Transform (const Vec2 &v, const Mat33 &A) noexcept
 Multiplies a vector by a matrix.
 
template<std::size_t M, typename T1 , std::size_t N, typename T2 >
constexpr auto playrho::Transform (const Vector< T1, M > &v, const Matrix< T2, M, N > &m) noexcept
 Multiplies an M-element vector by an M-by-N matrix. More...
 

Variables

constexpr auto playrho::DefaultRoundOffPrecission = unsigned{100000}
 Default round-off precision.
 

Detailed Description

Conventional and custom math related code.