MGL::Vector2
Contents
MGL::Vector2#
概要#
2Dベクトルを表現するための構造体です。
宣言#
namespace MGL
{
struct Vector2;
}
メンバ情報#
種類 |
名前 |
内容 |
バージョン |
---|---|---|---|
変数 |
1.0.0+ |
||
関数 |
1.0.0+ |
||
関数 |
ベクトルがおおよそゼロであるかを取得 |
1.0.0+ |
|
関数 |
ベクトルの長さを求める |
1.0.0+ |
|
関数 |
2つのベクトル間の距離を求める |
1.0.0+ |
|
関数 |
2つのベクトルの外積を求める |
1.0.0+ |
|
関数 |
2つのベクトルの内積を求める |
1.0.0+ |
|
関数 |
2つのベクトル間の角度を求める |
1.0.0+ |
|
関数 |
ベクトルの回転 |
1.0.0+ |
|
関数 |
ベクトルの正規化 |
1.0.0+ |
オペレータ#
名前 |
内容 |
バージョン |
---|---|---|
Vector2の加算 |
1.0.0+ |
|
Vector2の減算 |
1.0.0+ |
|
Vector2とスカラー値の乗算 |
1.0.0+ |
|
Vector2とスカラー値の除算 |
1.0.0+ |
|
Vector2の単項加算 |
1.0.0+ |
|
Vector2の単項減算 |
1.0.0+ |
|
Vector2とスカラー値の単項乗算 |
1.0.0+ |
|
Vector2とスカラー値の単項除算 |
1.0.0+ |
公開メンバ変数#
宣言#
struct Vector2
{
float x; //!< X成分
float y; //!< Y成分
};
説明#
- float x
ベクトルのX成分
- float y
ベクトルのY成分
コンストラクタ#
宣言#
// (1) ゼロ初期化
constexpr Vector2() noexcept
// (2) 値を指定して初期化
constexpr Vector2(float inX, float inY) noexcept
引数#
- (1) ゼロ初期化
引数なし
- (2) 値を指定して初期化
- float inX
初期化するX成分を指定します。
- float inY
初期化するY成分を指定します。
説明#
値をゼロまたは指定した値で初期化するためのコンストラクタです。
利用例#
// (1) ゼロ初期化
MGL::Vector2 v1;
// (2) 値を指定して初期化
MGL::Vector2 v2(3.0f, 2.0f);
バージョン情報#
- MGL 1.0.0
初回リリース
IsZero#
ベクトルがおおよそゼロであるかを取得します。
宣言#
[[nodiscard]] bool IsZero() const noexcept
戻り値#
- bool
おおよそゼロである場合はtrueを、そうでない場合はfalseを返します。
説明#
ベクトルのX成分とY成分の絶対値がMGL::Math::kEpsilon以下である場合にtrueを返します。この関数は浮動小数点数の誤差によりゼロを判別しにくい問題の解決策として実装されています。
利用例#
// 適当な値で初期化
MGL::Math::Vector2 v(10.0f, -20.0f);
// 各要素に対して10分の1を繰り返し、おおよそゼロになったらループを抜ける。
// ((v.x == 0.0f) && (v.y == 0.0f))とした場合は無限ループになる可能性があるが、
// IsZero()ではいずれループを抜ける。
while (!v.IsZero())
{
v /= 10.0f;
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
Length#
ベクトルの長さを求めます。
宣言#
[[nodiscard]] float Length() const noexcept
戻り値#
- float
ベクトルの長さ
説明#
ピタゴラスの定理を用いてベクトルの長さを求めます。
利用例#
MGL::Vector2 v(3.0f, 4.0f);
auto length = v.Length(); // length = 5.0f
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
Distance#
2つのベクトル間の距離を求めます。
宣言#
[[nodiscard]] float Distance(const Vector2 &target) const noexcept
引数#
- const Vector2 &target
対象となるベクトル
戻り値#
- float
自身と対象ベクトルとの距離
説明#
自身のベクトルが示す位置と、引数で指定された対象ベクトルが示す位置との間の距離を求めます。
利用例#
MGL::Vector2 v1(3.0f, 4.0f);
MGL::Vector2 v2(-7.0f, -5.0f);
auto distance = v1.Length(v2); // distance = 13.453624f
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
Cross#
2つのベクトルの外積を求めます。
宣言#
// (1) 自身と右辺値で計算
[[nodiscard]] float Cross(const Vector2 &rhs) const noexcept
// (2) 左辺値と右辺値を指定して計算
[[nodiscard]] static float Cross(const Vector2 &lhs, const Vector2 &rhs) noexcept
引数#
- (1) 自身と左辺値で計算
- const Vector2 &rhs
右辺値
- (2) 左辺値と右辺値を指定して計算
- const Vector2 &lhs
左辺値
- const Vector2 &rhs
右辺値
戻り値#
- (1) 自身と左辺値で計算
- float
自身と引数で指定した右辺値との外積
- (2) 左辺値と右辺値を指定して計算
- float
左辺値と右辺値との外積
説明#
2つのベクトルの外積を求めます。
(1)では自身を左辺値として引数の右辺値との外積を求めます。
(2)では左辺値と右辺値を指定します。こちらはstaticメンバ関数であるため、オブジェクトを生成する必要なく利用可能です。
利用例#
MGL::Vector2 v1(3.0f, 4.0f);
MGL::Vector2 v2(-7.0f, -5.0f);
// (1) 自身と右辺値で計算
auto cross1 = v1.Cross(v2); // cross1 = 13.0f
// (2) 左辺値と右辺値を指定して計算
auto cross2 = MGL::Vector2::Cross(v2, v1); // cross2 = -13.0f
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
Dot#
2つのベクトルの内積を求めます。
宣言#
// (1) 自身と右辺値で計算
[[nodiscard]] float Dot(const Vector2 &rhs) const noexcept
// (2) 左辺値と右辺値を指定して計算
[[nodiscard]] static float Dot(const Vector2 &lhs, const Vector2 &rhs) noexcept
引数#
- (1) 自身と左辺値で計算
- const Vector2 &rhs
右辺値
- (2) 左辺値と右辺値を指定して計算
- const Vector2 &lhs
左辺値
- const Vector2 &rhs
右辺値
戻り値#
- (1) 自身と左辺値で計算
- float
自身と引数で指定した右辺値との内積
- (2) 左辺値と右辺値を指定して計算
- float
左辺値と右辺値との内積
説明#
2つのベクトルの内積を求めます。
(1)では自身を左辺値として引数の右辺値との内積を求めます。
(2)では左辺値と右辺値を指定します。こちらはstaticメンバ関数であるため、オブジェクトを生成する必要なく利用可能です。
利用例#
MGL::Vector2 v1(3.0f, 4.0f);
MGL::Vector2 v2(-7.0f, -5.0f);
// (1) 自身と右辺値で計算
auto dot1 = v1.Dot(v2); // dot1 = -41.0f
// (2) 左辺値と右辺値を指定して計算
auto dot2 = MGL::Vector2::Dot(v2, v1); // dot2 = -41.0f
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
GetAngle#
自身と引数で指定したベクトル間での角度を求めます。
宣言#
[[nodiscard]] float GetAngle(const Vector2 &target) const noexcept
引数#
- const Vector2 &target
対象となるベクトル
戻り値#
- float
自身と対象ベクトル間の角度(ラジアン)
説明#
自身のベクトルから引数で指定された対象ベクトルまでの角度を求めます。戻り値の単位はラジアンです。
利用例#
MGL::Vector2 v1(1.0f, 0.0f);
MGL::Vector2 v2(0.5f, 0.5f);
auto angle = v1.GetAngle(v2); // angle = 0.785398f (度数法に直すと45°)
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
Rotate#
自身のベクトルを回転させます。
宣言#
void Rotate(float radian) noexcept
引数#
- float &radian
回転角度(ラジアン)
説明#
自身のベクトルを引数で指定した角度で回転させます。引数の単位はラジアンです。
利用例#
MGL::Vector2 v(1.0f, 0.0f);
// 45°をラジアンに変換して回転
v.Rotate(45.0f * MGL::Math::kDegreeToRadian); // v = (0.707107f, 0.707107f)
バージョン情報#
- MGL 1.0.0
初回リリース
関連#
Normalize#
自身のベクトルを正規化します。
宣言#
bool Normalize() noexcept
戻り値#
- bool
成功時にはtrueを、失敗時にはfalseを返します。
説明#
自身のベクトルを正規化します。ベクトルのX成分とY成分が共にゼロである場合、この関数は失敗しfalseを返します。
利用例#
MGL::Vector2 v(3.0f, 2.0f);
v.Normalize(); // v = (0.832050f, 0.554700f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator+#
Vector2の加算用オペレータです。
宣言#
constexpr Vector2 operator+(const Vector2 &lhs, const Vector2 &rhs) noexcept
引数#
- const Vector2 &lhs
左辺値
- const Vector2 &rhs
右辺値
戻り値#
- Vector2
左辺値と右辺値の各要素を加算して返します。
説明#
2つのVector2の加算を行うための二項演算子です。左辺値のそれぞれの成分に右辺値を加算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
MGL::Vector2 v2(3.0f, 4.0f);
auto v3 = v1 + v2; // v3 = (8.0f, 6.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator-#
Vector2の減算用オペレータです。
宣言#
constexpr Vector2 operator-(const Vector2 &lhs, const Vector2 &rhs) noexcept
引数#
- const Vector2 &lhs
左辺値
- const Vector2 &rhs
右辺値
戻り値#
- Vector2
左辺値と右辺値の各要素を減算して返します。
説明#
2つのVector2の減算を行うための二項演算子です。左辺値のそれぞれの成分に右辺値を減算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
MGL::Vector2 v2(3.0f, 4.0f);
auto v3 = v1 - v2; // v3 = (2.0f, -2.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator*#
Vector2とスカラー値との乗算用オペレータです。
宣言#
constexpr Vector2 operator*(const Vector2 &lhs, float rhs) noexcept
引数#
- const Vector2 &lhs
左辺値
- float rhs
右辺値
戻り値#
- Vector2
左辺値の各成分に右辺値を乗算した結果を返します。
説明#
Vector2とスカラー値との乗算を行うための二項演算子です。左辺値の各成分に右辺値を乗算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
auto v2 = v1 * 2.0f; // v2 = (10.0f, 4.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator/#
Vector2とスカラー値との除算用オペレータです。
宣言#
constexpr Vector2 operator/(const Vector2 &lhs, float rhs) noexcept
引数#
- const Vector2 &lhs
左辺値
- float rhs
右辺値
戻り値#
- Vector2
左辺値の各成分に右辺値を除算した結果を返します。
説明#
Vector2とスカラー値との除算を行うための二項演算子です。左辺値の各成分に右辺値を除算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
auto v2 = v1 / 2.0f; // v2 = (2.5f, 1.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator+=#
Vector2の単項加算用オペレータです。
宣言#
constexpr Vector2& operator+=(const Vector2 &rhs) noexcept
引数#
- const Vector2 &rhs
右辺値
戻り値#
- Vector2 &
自身と右辺値の各要素を加算して返します。
説明#
自身に右辺値の加算を行うための単項演算子です。各成分に右辺値を加算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
MGL::Vector2 v2(3.0f, 4.0f);
v1 += v2; // v1 = (8.0f, 6.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator-=#
Vector2の単項減算用オペレータです。
宣言#
constexpr Vector2& operator-=(const Vector2 &rhs) noexcept
引数#
- const Vector2 &rhs
右辺値
戻り値#
- Vector2 &
自身と右辺値の各要素を減算して返します。
説明#
自身に右辺値の減算を行うための単項演算子です。各成分に右辺値を減算した結果を返します。
利用例#
MGL::Vector2 v1(5.0f, 2.0f);
MGL::Vector2 v2(3.0f, 4.0f);
v1 -= v2; // v1 = (2.0f, -2.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator*=#
Vector2とスカラー値との単項乗算用オペレータです。
宣言#
constexpr Vector2& operator*=(float rhs) noexcept
引数#
- float rhs
右辺値
戻り値#
- Vector2 &
自身の各要素に右辺値を乗算した結果を返します。
説明#
自身の各要素を右辺のスカラー値で乗算するための単項演算子です。
利用例#
MGL::Vector2 v(5.0f, 2.0f);
v *= 2.0f; // v = (10.0f, 4.0f)
バージョン情報#
- MGL 1.0.0
初回リリース
operator/=#
Vector2とスカラー値との単項除算用オペレータです。
宣言#
constexpr Vector2& operator/=(float rhs) noexcept
引数#
- float rhs
右辺値
戻り値#
- Vector2 &
自身の各要素を右辺値で除算した結果を返します。
説明#
自身の各要素を右辺のスカラー値で除算するための単項演算子です。
利用例#
MGL::Vector2 v(5.0f, 2.0f);
v /= 2.0f; // v = (2.5f, 1.0f)
バージョン情報#
- MGL 1.0.0
初回リリース