8#ifndef DESIGNLAB_MATH_EULER_H_
9#define DESIGNLAB_MATH_EULER_H_
41 constexpr EulerXYZ(
const float x,
const float y,
const float z) :
41 constexpr EulerXYZ(
const float x,
const float y,
const float z) : {
…}
64 return IsEqual(
x_angle, other.x_angle) && IsEqual(
y_angle, other.y_angle) && IsEqual(
z_angle, other.z_angle);
69 return !(*
this == other);
77 constexpr void SetDeg(
const float x,
const float y,
const float z)
77 constexpr void SetDeg(
const float x,
const float y,
const float z) {
…}
87 [[nodiscard]] std::string
ToString()
const;
117inline std::basic_ostream<Char>&
operator <<(std::basic_ostream<Char>& os,
const EulerXYZ& r)
121 os << FloatingPointNumToString(r.
x_angle) << Char(
',') << FloatingPointNumToString(r.
y_angle) << Char(
',') << FloatingPointNumToString(r.
z_angle);
139[[nodiscard]] Vector3
RotateVector3(
const Vector3& vec,
const EulerXYZ& rot);
std::string FloatingPointNumToString(const T num, const int digit=kDigit, const int width=kWidth)
小数を文字列に変換する関数. C++ では C のフォーマットのように %3.3f とかで小数を文字列に変換できないため自作する.
constexpr T ConvertDegToRad(const T deg) noexcept
角度を [deg] から [rad] に変換する関数.
constexpr bool IsEqual(const T num1, const T num2) noexcept
C++において,小数同士の計算は誤差が出てしまう. 誤差込みで値が等しいか調べる.
Vector3 RotateVector3(const Vector3 &vec, const EulerXYZ &rot)
回転させたベクトルを返す.三角関数の処理が多く重たいので注意.
std::basic_istream< Char > & operator>>(std::basic_istream< Char > &is, EulerXYZ &r)
入力ストリーム
std::basic_ostream< Char > & operator<<(std::basic_ostream< Char > &os, const EulerXYZ &r)
出力ストリーム.Csv形式で出力する.カンマ区切り.単位は [rad].
float x_angle
X 軸周りの回転 [rad]
static constexpr EulerXYZ MakeEulerXYZDeg(const float x, const float y, const float z)
オイラー角を 単位[deg] で作成する.
float y_angle
Y 軸周りの回転 [rad]
constexpr EulerXYZ & operator=(const EulerXYZ &other)=default
std::string ToStringDeg() const
オイラー角を文字列に変換する. 単位は 度 [deg].
std::string ToCsvString() const
オイラー角をCsv形式の文字列に変換する.カンマ区切り. 単位は ラジアン [rad]
constexpr EulerXYZ operator*(const float s) const noexcept
constexpr EulerXYZ(const EulerXYZ &other)=default
constexpr EulerXYZ()
デフォルトコンストラクタでは 0,0,0 で初期化する.
std::string ToString() const
オイラー角を文字列に変換する. 単位は ラジアン [rad]
float z_angle
Z 軸周りの回転 [rad]
constexpr bool operator!=(const EulerXYZ &other) const noexcept
constexpr EulerXYZ(EulerXYZ &&other) noexcept=default
constexpr void SetDeg(const float x, const float y, const float z)
オイラー角を 単位 度 [deg] で初期化する.
constexpr EulerXYZ(const float x, const float y, const float z)
rad単位で初期化する.
constexpr bool operator==(const EulerXYZ &other) const noexcept