二次元ベクトルを扱うには Udon::Vec2
クラスを使用します。
二次元ベクトルを表現するためのクラスです。x 軸と y 軸の 2 つの要素からなる二次元ベクトルを格納し、ベクトル演算や座標変換などの操作を提供します。
x 軸の右方向を正、y 軸の上方向を正とする直交座標系を使用します。
Vec2
型のインスタンスには、x
と y
という 2 つの要素があります。これらの要素にアクセスするには、メンバ変数へのドット演算子(.
)を使用します。
書き込み
読み取り
Vector2D
クラスにはベクトル演算を行うための各種演算子があります。以下はその一部です。
加算
減算
スカラ倍
show()
setup
関数内で Serial.begin()
を呼び出しシリアル通信が開始されている必要があります。
length() -> double
三平方の定理を用いてベクトルの長さを求めます。
distanceFrom(Vec2 other) -> double
他のベクトルとの距離を求めます。
angleAt(Vec2 other) -> double
指定された点からの角度を求めます。
angle() -> double
原点からの時計回りの角度を求めます
scaledLength(double length) -> Vec2
ベクトルの長さ(大きさ)を指定した値に設定したベクトルを返します。ベクトルの向きは変わらず、大きさのみが変更されます。
基になるベクトルは変更されません。
scaleLength(double length) -> Vec2&
ベクトルの長さ(大きさ)を指定した値に変更します。
基になるベクトルを変更します。
長さに 0 を渡すとゼロベクトルとなり方向成分を失うため、次回呼び出し以降の長さ変更ができなくなる点に注意してください。
rotated(double angle) -> Vec2
回転行列を用いて、ベクトルを指定した角度回転させた新しいベクトルを返します。
回転の中心は原点、回転方向は時計回りです。
基になるベクトルは変更されません。
rotate(double angle) -> Vec2&
回転行列を用いて、ベクトルを指定した角度回転させます。
回転の中心は原点、回転方向は時計回りです。
基になるベクトルを変更します。
rotatedAt(Vec2 center, double angle) -> Vec2
回転行列を用いて、指定した回転中心(中心点)を基準にベクトルを指定した角度(ラジアン)だけ回転させた新しいベクトルを返します。
回転方向は時計回りです。
基になるベクトルは変更されません。
rotateAt(Vec2 center, double angle) -> Vec2&
回転行列を用いて、指定した回転中心(中心点)を基準にベクトルを指定した角度(ラジアン)だけ回転させます。
回転方向は時計回りです。
基になるベクトルを変更します。
toPolar() -> Polar
ベクトル(x, y)を極座標系(r, θ)に変換し返します。
clamped(double min, double max) -> Vec2
各要素に constrain(Arduino)、 std::clamp(STL) を適用させたベクトルを返します。
基になるベクトルは変更されません。
clamp(double min, double max) -> Vec2&
各要素に constrain(Arduino)、 std::clamp(STL) を適用させ代入します。
基になるベクトルを変更します。
mapped(double fromMin, double fromMax, double toMin, double toMax) -> Vec2
各要素をある範囲から別の範囲に再マップしたベクトルを返します。
各要素に map(Arduino) を適用させたベクトルを返します。
基になるベクトルは変更されません。
map(double fromMin, double fromMax, double toMin, double toMax) -> Vec2&
各要素をある範囲から別の範囲に再マップします。
各要素に map(Arduino) を適用させます。
基になるベクトルを変更します。
OpenSiv3D
が持つ s3d::Vector2D<T>
との相互変換を行えます。
s3d::Vector2D<T>
-> Udon::Vec2
Udon::Vec2
-> s3d::Vector2D<T>
このクラスはシリアライズ(バイト列化)に対応しています。したがって各通信用クラスに渡すことでマイコン同士でベクトルデータのやり取りができます。詳細は各通信用クラスのドキュメントを参照してください。