UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Math.hpp
[詳解]
1//
2// 数学定数、関数
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7#pragma once
8
9#include <math.h>
10
11#ifdef abs
12# undef abs
13
14template <typename T>
15inline constexpr T abs(const T& rhs)
16{
17 return rhs < 0 ? -rhs : rhs;
18}
19
20#endif
21
22namespace Udon
23{
24
26 constexpr double Pi = 3.1415926535897932384626433832795; // std::numbers::pi_v<double> (C++20)
27
29 constexpr double HalfPi = 1.5707963267948966192313216916398; // std::numbers::pi_v<double> / 2 (C++20)
30
32 constexpr double TwoPi = 6.283185307179586476925286766559; // std::numbers::pi_v<double> * 2 (C++20)
33
35 constexpr double DegToRad = 0.017453292519943295769236907684886; // std::numbers::pi_v<double> / 180 (C++20)
36
38 constexpr double RadToDeg = 57.295779513082320876798154814105; // 180 / std::numbers::pi_v<double> (C++20)
39
40}; // namespace Udon
41
42namespace Udon
43{
44
46 template <typename A, typename B>
47 inline constexpr auto
48 Min(const A& lhs, const B& rhs) -> decltype(lhs, rhs)
49 {
50 return lhs < rhs ? lhs : rhs;
51 }
52
54 template <typename A, typename B>
55 inline constexpr auto
56 Max(const A& lhs, const B& rhs) -> decltype(lhs, rhs)
57 {
58 return lhs > rhs ? lhs : rhs;
59 }
60
66 template <typename A, typename B, typename C>
67 inline constexpr A
68 Constrain(const A& amt, const B& low, const C& high)
69 {
70 return Min(Max(amt, low), high);
71 }
72
76 template <typename T>
77 inline constexpr T
78 ToRadians(const T& rhs)
79 {
80 return rhs * DegToRad;
81 }
82
86 template <typename T>
87 inline constexpr T
88 ToDegrees(const T& rhs)
89 {
90 return rhs * RadToDeg;
91 }
92
96 template <typename T>
97 inline constexpr T
98 Abs(const T& rhs)
99 {
100 return rhs < 0 ? -rhs : rhs;
101 }
102
106 template <typename T>
107 inline constexpr T
108 Sq(const T& x)
109 {
110 return x * x;
111 }
112
114 inline constexpr int
115 Floor(double x)
116 {
117 return x - (int)x < 0 ? (int)x - 1 : (int)x;
118 }
119
121 inline constexpr int
122 Round(double x)
123 {
124 return x - (int)x >= 0.5 ? (int)x + 1 : (int)x;
125 }
126
128 inline constexpr int
129 Ceil(double x)
130 {
131 return x - (int)x > 0 ? (int)x + 1 : (int)x;
132 }
133
135 inline constexpr double
136 Map(const double value, const double inputMin, const double inputMax, const double outputMin, const double outputMax)
137 {
138 return (value - inputMin) * (outputMax - outputMin) / (inputMax - inputMin) + outputMin;
139 }
140
141 // inline bool
142 // FloatEq(const double l, const double r)
143 // {
144 // return
145 // }
146
153 inline double
154 Normalized(double value, double min, double max)
155 {
156 const auto cycle = max - min;
157
158 const auto modValue = fmod((value - min), cycle) + min;
159
160 if (modValue < min)
161 {
162 return modValue + cycle;
163 }
164 else
165 {
166 return modValue;
167 }
168 }
169
174 inline double
175 Hypotenuse(double x, double y)
176 {
177 return sqrt(x * x + y * y);
178 }
179
180} // namespace Udon
Definition Bit.hpp:12
constexpr T Abs(const T &rhs)
絶対値を返す (std::abs)
Definition Math.hpp:98
constexpr auto Max(const A &lhs, const B &rhs) -> decltype(lhs, rhs)
2つの値のうち大きい方を返す (std::max)
Definition Math.hpp:56
constexpr T ToRadians(const T &rhs)
度数法の角度を弧度法に変換する
Definition Math.hpp:78
double Hypotenuse(double x, double y)
三平方の定理を用いて、2辺の長さから斜辺の長さを求める
Definition Math.hpp:175
constexpr double Pi
π
Definition Math.hpp:26
constexpr T Sq(const T &x)
二乗を求める (std::pow(x, 2))
Definition Math.hpp:108
constexpr int Round(double x)
四捨五入 (std::round)
Definition Math.hpp:122
constexpr double DegToRad
度数法から弧度法に変換する係数
Definition Math.hpp:35
double Normalized(double value, double min, double max)
値を正規化する
Definition Math.hpp:154
constexpr double RadToDeg
弧度法から度数法に変換する係数
Definition Math.hpp:38
constexpr T ToDegrees(const T &rhs)
弧度法の角度を度数法に変換する
Definition Math.hpp:88
constexpr A Constrain(const A &amt, const B &low, const C &high)
値を指定された範囲内に収める (std::clamp)
Definition Math.hpp:68
constexpr int Floor(double x)
小数点切り捨て (std::floor)
Definition Math.hpp:115
constexpr auto Min(const A &lhs, const B &rhs) -> decltype(lhs, rhs)
2つの値のうち小さい方を返す (std::min)
Definition Math.hpp:48
constexpr double HalfPi
π/2
Definition Math.hpp:29
constexpr double TwoPi
π*2
Definition Math.hpp:32
constexpr int Ceil(double x)
小数点切り上げ (std::ceil)
Definition Math.hpp:129
constexpr double Map(const double value, const double inputMin, const double inputMax, const double outputMin, const double outputMax)
数値をある範囲から別の範囲に再マッピングする
Definition Math.hpp:136