UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Polar.hpp
[詳解]
1//
2// 直交座標系 前方定義
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7#pragma once
8
11
12namespace Udon
13{
14
15
16 struct Vec2;
17
18
20 struct Polar
21 {
23 using ValueType = double;
24
27
30
32 constexpr Polar() noexcept
33 : r()
34 , theta()
35 {
36 }
37
41 constexpr Polar(ValueType r, ValueType theta) noexcept
42 : r(r)
43 , theta(theta)
44 {
45 }
46
48 Polar(const Polar&) = default;
49
51 Polar& operator=(const Polar&) = default;
52
55 ValueType x() const noexcept
56 {
57 return r * cos(theta);
58 }
59
62 ValueType y() const noexcept
63 {
64 return r * sin(theta);
65 }
66
67 friend constexpr Polar operator+(const Polar& lhs, const Polar& rhs) noexcept { return { lhs.r + rhs.r, lhs.theta + rhs.theta }; }
68 friend constexpr Polar operator-(const Polar& lhs, const Polar& rhs) noexcept { return { lhs.r - rhs.r, lhs.theta - rhs.theta }; }
69 friend constexpr Polar operator*(const Polar& lhs, const Polar& rhs) noexcept { return { lhs.r * rhs.r, lhs.theta * rhs.theta }; }
70 friend constexpr Polar operator/(const Polar& lhs, const Polar& rhs) noexcept { return { lhs.r / rhs.r, lhs.theta / rhs.theta }; }
71
72 Polar& operator+=(const Polar& rhs) noexcept { return *this = *this + rhs; }
73 Polar& operator-=(const Polar& rhs) noexcept { return *this = *this - rhs; }
74 Polar& operator*=(const Polar& rhs) noexcept { return *this = *this * rhs; }
75 Polar& operator/=(const Polar& rhs) noexcept { return *this = *this / rhs; }
76
77 friend constexpr bool operator==(const Polar& lhs, const Polar& rhs) noexcept { return lhs.r == rhs.r && lhs.theta == rhs.theta; }
78 friend constexpr bool operator!=(const Polar& lhs, const Polar& rhs) noexcept { return not(lhs == rhs); }
79
81 constexpr explicit operator bool() const noexcept { return r or theta; }
82
85 Vec2 toVector() const noexcept;
86
88 };
89} // namespace Udon
#define UDON_ENUMERABLE(...)
メンバ変数の列挙を可能にする
Definition EnumerableMacro.hpp:11
Definition Bit.hpp:12
極座標系
Definition Polar.hpp:21
friend constexpr Polar operator/(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:70
ValueType x() const noexcept
x 座標を取得する
Definition Polar.hpp:55
ValueType y() const noexcept
y 座標を取得する
Definition Polar.hpp:62
Polar(const Polar &)=default
デフォルトコピーコンストラクタ
constexpr Polar(ValueType r, ValueType theta) noexcept
コンストラクタ
Definition Polar.hpp:41
ValueType theta
角度
Definition Polar.hpp:29
double ValueType
要素の型
Definition Polar.hpp:23
friend constexpr Polar operator-(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:68
Polar & operator/=(const Polar &rhs) noexcept
Definition Polar.hpp:75
ValueType r
中心からの距離
Definition Polar.hpp:26
friend constexpr bool operator==(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:77
Vec2 toVector() const noexcept
ベクトルに変換する
Definition Polar.hpp:12
friend constexpr bool operator!=(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:78
friend constexpr Polar operator*(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:69
Polar & operator+=(const Polar &rhs) noexcept
Definition Polar.hpp:72
Polar & operator*=(const Polar &rhs) noexcept
Definition Polar.hpp:74
Polar & operator=(const Polar &)=default
デフォルトコピー代入演算子
friend constexpr Polar operator+(const Polar &lhs, const Polar &rhs) noexcept
Definition Polar.hpp:67
Polar & operator-=(const Polar &rhs) noexcept
Definition Polar.hpp:73
constexpr Polar() noexcept
デフォルトコンストラクタ
Definition Polar.hpp:32
二次元ベクトル
Definition Vector2D.hpp:22