MGL::Vector2#

概要#

2Dベクトルを表現するための構造体です。

宣言#

namespace MGL
{
    struct Vector2;
}

メンバ情報#

種類

名前

内容

変数

公開メンバ変数

関数

コンストラクタ

関数

IsZero

ベクトルがおおよそゼロであるかを取得

関数

Length

ベクトルの長さを求める

関数

Distance

2つのベクトル間の距離を求める

関数

Cross

2つのベクトルの外積を求める

関数

Dot

2つのベクトルの内積を求める

関数

GetAngle

2つのベクトル間の角度を求める

関数

Rotate

ベクトルの回転

関数

Normalize

ベクトルの正規化

オペレータ#

名前

内容

operator+

Vector2の加算

operator-

Vector2の減算

operator*

Vector2とスカラー値の乗算

operator/

Vector2とスカラー値の除算

operator+=

Vector2の単項加算

operator-=

Vector2の単項減算

operator*=

Vector2とスカラー値の単項乗算

operator/=

Vector2とスカラー値の単項除算


公開メンバ変数#

宣言#

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);

IsZero#

ベクトルがおおよそゼロであるかを取得します。

宣言#

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;
}

関連#


Length#

ベクトルの長さを求めます。

宣言#

float Length() const noexcept

戻り値#

float

ベクトルの長さ

説明#

ピタゴラスの定理を用いてベクトルの長さを求めます。

利用例#

MGL::Vector2 v(3.0f, 4.0f);

auto length = v.Length();    // length = 5.0f

Distance#

2つのベクトル間の距離を求めます。

宣言#

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

Cross#

2つのベクトルの外積を求めます。

宣言#

// (1) 自身と右辺値で計算
float Cross(const Vector2 &rhs) const noexcept

// (2) 左辺値と右辺値を指定して計算
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

Dot#

2つのベクトルの内積を求めます。

宣言#

// (1) 自身と右辺値で計算
float Dot(const Vector2 &rhs) const noexcept

// (2) 左辺値と右辺値を指定して計算
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

GetAngle#

自身と引数で指定したベクトル間での角度を求めます。

宣言#

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°)

関連#


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)

関連#


Normalize#

自身のベクトルを正規化します。

宣言#

bool Normalize() noexcept

戻り値#

bool

成功時にはtrueを、失敗時にはfalseを返します。

説明#

自身のベクトルを正規化します。ベクトルのX成分とY成分が共にゼロである場合、この関数は失敗しfalseを返します。

利用例#

MGL::Vector2 v(3.0f, 2.0f);

v.Normalize();   // v = (0.832050f, 0.554700f)

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)

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)

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)

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)

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)

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)

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)

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)