rotateframe
説明
は、四元数 rotationResult
= rotateframe(quat
,cartesianPoints
)quat
を使用して直交座標点の基準座標系を回転します。四元数の要素は回転に使用する前に正規化されます。
例
quaternion ベクトルを使用した座標系の回転
3 次元で点を定義します。点の座標は、常に "x"、"y"、"z" の順で指定します。可視化しやすくするために、"x"-"y" 平面上の点を定義します。
x = 0.5; y = 0.5; z = 0; plot(x,y,"ko") hold on axis([-1 1 -1 1])
"z" 軸を中心とする 2 つの異なる回転を指定する quaternion ベクトルを作成します。1 つは座標系を 45 度回転し、もう 1 つは点を -90 度回転します。rotateframe
を使用して回転を実行します。
quat = quaternion([0,0,pi/4; ... 0,0,-pi/2],"euler","XYZ","frame"); rereferencedPoint = rotateframe(quat,[x,y,z])
rereferencedPoint = 2×3
0.7071 -0.0000 0
-0.5000 0.5000 0
再参照された点をプロットします。
plot(rereferencedPoint(1,1),rereferencedPoint(1,2),"bo") plot(rereferencedPoint(2,1),rereferencedPoint(2,2),"go")
四元数を使用した点のグループの再参照
3 次元空間で 2 つの点を定義します。これらの点を再参照する四元数を定義します。最初に基準座標系を "z" 軸を中心に 30 度回転してから、新しい "y" 軸を中心に 45 度回転します。
a = [1,0,0]; b = [0,1,0]; quat = quaternion([30,45,0],"eulerd","ZYX","point");
rotateframe
で四元数の回転演算子を使用して両方の点を参照します。結果を表示します。
rP = rotateframe(quat,[a;b])
rP = 2×3
0.6124 -0.3536 0.7071
0.5000 0.8660 -0.0000
点の元の向きと回転後の向きを可視化します。原点から各点までの線を可視化のために描画します。
plot3(a(1),a(2),a(3),"bo"); hold on grid on axis([-1 1 -1 1 -1 1]) xlabel("x") ylabel("y") zlabel("z") plot3(b(1),b(2),b(3),"ro"); plot3(rP(1,1),rP(1,2),rP(1,3),"bd") plot3(rP(2,1),rP(2,2),rP(2,3),"rd") plot3([0;rP(1,1)],[0;rP(1,2)],[0;rP(1,3)],"k") plot3([0;rP(2,1)],[0;rP(2,2)],[0;rP(2,3)],"k") plot3([0;a(1)],[0;a(2)],[0;a(3)],"k") plot3([0;b(1)],[0;b(2)],[0;b(3)],"k")
入力引数
quat
— 回転を定義する四元数
quaternion
オブジェクト | quaternion
オブジェクトのベクトル
回転を定義する四元数。quaternion
オブジェクトまたは quaternion
オブジェクトのベクトルとして指定します。quat
と cartesianPoints
のサイズは次のように互換性がなければなりません。
length(quat) == size(cartesianPoints,1)
またはlength(quat) == 1
またはsize(cartesianPoints,1) == 1
cartesianPoints
— 3 次元直交座標点
1 行 3 列の数値ベクトル | N 行 3 列の数値行列
3 次元直交座標点。単一の点を表す 1 行 3 列の数値ベクトルまたは N 点を表す N 行 3 列の数値行列として指定します。quat
と cartesianPoints
のサイズは次のように互換性がなければなりません。
length(quat) == size(cartesianPoints,1)
またはlength(quat) == 1
またはsize(cartesianPoints,1) == 1
データ型: single
| double
出力引数
rotationResult
— 再参照された直交座標点
1 行 3 列の数値ベクトル | 数値行列
回転後の基準座標系に基づいて定義される直交座標点。1 行 3 列の数値ベクトルまたは数値行列として返されます。
quat
がスカラー quaternion
オブジェクトであり、cartesianPoints
が単一の点を表す 1 行 3 列のベクトルである場合、rotationResult
は 1 行 3 列のベクトルです。それ以外の場合、rotationResult
は M 行 3 列の行列です。ここで、M は length(quat)
と size(cartesianPoints,1)
の最大値です。
データ型: single
| double
アルゴリズム
四元数の座標系の回転では、指定された四元数に従って元の基準座標系を回転し、R3 で指定された点を再参照します。
ここで、q は四元数であり、* は共役を表します。u は回転する点であり、四元数として指定します。
便宜上、関数 rotateframe
は R3 の点を受け取り、R3 の点を返します。任意の四元数 q = a + bi + cj + dk と任意の座標 [x,y,z] が指定された関数呼び出しを考えます。
point = [x,y,z]; rereferencedPoint = rotateframe(q,point)
rotateframe
は次の操作を実行します。
点 [x,y,z] を四元数に変換します。
四元数 q を正規化します。
回転を適用します。
四元数の出力 vq を変換して R3 に戻します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
バージョン履歴
R2020b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)