二次元ベクトルを扱うには Udon::Vec2 クラスを使用します。
構造
二次元ベクトルを表現するためのクラスです。x 軸と y 軸の 2 つの要素からなる二次元ベクトルを格納し、ベクトル演算や座標変換などの操作を提供します。
struct Vec2
{
double x;
double y;
};
x 軸の右方向を正、y 軸の上方向を正とする直交座標系を使用します。

構築
二次元ベクトル
Definition Vector2D.hpp:22
要素へのアクセス
Vec2 型のインスタンスには、x と y という 2 つの要素があります。これらの要素にアクセスするには、メンバ変数へのドット演算子(.)を使用します。
書き込み
ValueType y
Y成分
Definition Vector2D.hpp:31
ValueType x
X成分
Definition Vector2D.hpp:28
読み取り
ベクトル演算
Vector2D クラスにはベクトル演算を行うための各種演算子があります。以下はその一部です。
加算
減算
スカラ倍
シリアルモニターに送信する
show()
setup 関数内で Serial.begin() を呼び出しシリアル通信が開始されている必要があります。
void setup()
{
Serial.begin(115200);
vector.show();
}
ベクトルの長さを求める
length() -> double
三平方の定理を用いてベクトルの長さを求めます。
const double length = vector.
length();
ValueType length() const noexcept
原点からの距離を求める
Definition Vector2D.hpp:221
distanceFrom(Vec2 other) -> double
他のベクトルとの距離を求めます。
ValueType distanceFrom(const Vec2 &rhs) const noexcept
指定された点からの距離を求める
Definition Vector2D.hpp:213
ベクトルの角度を求める
angleAt(Vec2 other) -> double
指定された点からの角度を求めます。
angle() -> double
原点からの時計回りの角度を求めます
ベクトルの長さを変更する
scaledLength(double length) -> Vec2
ベクトルの長さ(大きさ)を指定した値に設定したベクトルを返します。ベクトルの向きは変わらず、大きさのみが変更されます。
基になるベクトルは変更されません。
Vec2 scaledLength(ValueType length) const noexcept
長さを変更したベクトルを返す
Definition Vector2D.hpp:235
scaleLength(double length) -> Vec2&
ベクトルの長さ(大きさ)を指定した値に変更します。
基になるベクトルを変更します。
長さに 0 を渡すとゼロベクトルとなり方向成分を失うため、次回呼び出し以降の長さ変更ができなくなる点に注意してください。
Vec2 & scaleLength(ValueType length) noexcept
ベクトルの長さを指定された値にする
Definition Vector2D.hpp:243
原点を中心にベクトルを指定角度回転させる
rotated(double angle) -> Vec2
回転行列を用いて、ベクトルを指定した角度回転させた新しいベクトルを返します。
回転の中心は原点、回転方向は時計回りです。
基になるベクトルは変更されません。
constexpr T ToRadians(const T &rhs)
度数法の角度を弧度法に変換する
Definition Math.hpp:90
Vec2 rotated(ValueType angle) const noexcept
原点を中心に回転したベクトルを返す
Definition Vector2D.hpp:172
rotate(double angle) -> Vec2&
回転行列を用いて、ベクトルを指定した角度回転させます。
回転の中心は原点、回転方向は時計回りです。
基になるベクトルを変更します。
Vec2 & rotate(ValueType angle) noexcept
原点を中心に回転させる
Definition Vector2D.hpp:180
指定した点を中心にベクトルを指定角度回転させる
rotatedAt(Vec2 center, double angle) -> Vec2
回転行列を用いて、指定した回転中心(中心点)を基準にベクトルを指定した角度(ラジアン)だけ回転させた新しいベクトルを返します。
回転方向は時計回りです。
基になるベクトルは変更されません。
Vec2 rotatedAt(const Vec2 ¢er, ValueType angle) const noexcept
指定された点を中心に時計回りに回転したベクトルを返す
Definition Vector2D.hpp:152
rotateAt(Vec2 center, double angle) -> Vec2&
回転行列を用いて、指定した回転中心(中心点)を基準にベクトルを指定した角度(ラジアン)だけ回転させます。
回転方向は時計回りです。
基になるベクトルを変更します。
Vec2 & rotateAt(const Vec2 ¢er, ValueType angle) noexcept
指定された点を中心に時計回りに回転させる
Definition Vector2D.hpp:164
極座標系へ変換する
toPolar() -> Polar
ベクトル(x, y)を極座標系(r, θ)に変換し返します。
極座標系
Definition Polar.hpp:21
Udon::Polar toPolar() const noexcept
Definition Vector2D.hpp:18
ベクトルの各要素の値を一定の範囲に収める
clamped(double min, double max) -> Vec2
各要素に constrain(Arduino)、 std::clamp(STL) を適用させたベクトルを返します。
基になるベクトルは変更されません。
constexpr Vec2 clamped(ValueType min, ValueType max) const noexcept
各要素に制限をかけたベクトルを返す
Definition Vector2D.hpp:298
clamp(double min, double max) -> Vec2&
各要素に constrain(Arduino)、 std::clamp(STL) を適用させ代入します。
基になるベクトルを変更します。
Vec2 & clamp(ValueType min, ValueType max) noexcept
各要素に制限をかける
Definition Vector2D.hpp:307
ベクトルをリマッピングする
mapped(double fromMin, double fromMax, double toMin, double toMax) -> Vec2
各要素をある範囲から別の範囲に再マップしたベクトルを返します。
各要素に map(Arduino) を適用させたベクトルを返します。
基になるベクトルは変更されません。
constexpr Vec2 mapped(ValueType fromMin, ValueType fromMax, ValueType toMin, ValueType toMax) const noexcept
各要素をある範囲から別の範囲に再マップしたベクトルを返す
Definition Vector2D.hpp:254
map(double fromMin, double fromMax, double toMin, double toMax) -> Vec2&
各要素をある範囲から別の範囲に再マップします。
各要素に map(Arduino) を適用させます。
基になるベクトルを変更します。
vector.
map(0, 200, 0, 400);
Vec2 & map(ValueType fromMin, ValueType fromMax, ValueType toMin, ValueType toMax) noexcept
各要素をある範囲から別の範囲に再マップする
Definition Vector2D.hpp:268
OpenSiv3D との連携
OpenSiv3D が持つ s3d::Vector2D<T> との相互変換を行えます。
s3d::Vector2D<T> -> Udon::Vec2
Udon::Vec2 -> s3d::Vector2D<T>
s3d::Vec2 sivVector = udonVector;
シリアライズ
このクラスはシリアライズ(バイト列化)に対応しています。したがって各通信用クラスに渡すことでマイコン同士でベクトルデータのやり取りができます。詳細は各通信用クラスのドキュメントを参照してください。
writer.setMessage(vector);