bsplinepolytraj
B スプラインを使用した多項式軌跡の生成
説明
例
2 次元平面運動の B スプライン軌跡の計算
一連の 2 次元 "xy" 制御点を指定して、関数 bsplinepolytraj
を使用します。これらの制御点を使用して、多角形の内側に B スプラインで軌跡が作成されます。軌跡の開始時間と終了時間も指定します。
cpts = [1 4 4 3 -2 0; 0 1 2 4 3 1]; tpts = [0 5];
B スプライン軌跡を計算します。関数は、制御点を使用してウェイポイントを通る多項式の軌跡の位置 (q
)、速度 (qd
)、加速度 (qdd
)、時間ベクトル (tvec
)、および多項式係数 (pp
) を出力します。
tvec = 0:0.01:5; [q, qd, qdd, pp] = bsplinepolytraj(cpts,tpts,tvec);
結果をプロットします。制御点とその内側の結果の軌跡を表示します。
figure plot(cpts(1,:),cpts(2,:),'xb-') hold all plot(q(1,:), q(2,:)) xlabel('X') ylabel('Y') hold off
B スプライン軌跡の各要素の位置をプロットします。これらの軌跡は、時間でパラメーター化された 3 次区分的多項式です。
figure plot(tvec,q) hold all plot([0:length(cpts)-1],cpts,'x') xlabel('t') ylabel('Position Value') legend('X-positions','Y-positions') hold off
B スプラインによる内挿
B スプラインで内挿するウェイポイントを作成します。
wpts1 = [0 1 2.1 8 4 3]; wpts2 = [0 1 1.3 .8 .3 .3]; wpts = [wpts1; wpts2]; L = length(wpts) - 1;
制御多角形の内側の点の計算に使用する行列を作成します。
r = zeros(L+1, size(wpts,1)); A = eye(L+1); for i= 1:(L-1) A(i+1,(i):(i+2)) = [1 4 1]; r(i+1,:) = 6*wpts(:,i+1)'; end
終点をオーバーライドし、r0
と rL
を選択します。
A(2,1:3) = [3/2 7/2 1]; A(L,(L-1):(L+1)) = [1 7/2 3/2]; r(1,:) = (wpts(:,1) + (wpts(:,2) - wpts(:,1))/2)'; r(end,:) = (wpts(:,end-1) + (wpts(:,end) - wpts(:,end-1))/2)'; dInterior = (A\r)';
完全な制御多角形を作成し、bsplinepolytraj
を使用して新しい制御点で多項式を計算します。
cpts = [wpts(:,1) dInterior wpts(:,end)]; t = 0:0.01:1; q = bsplinepolytraj(cpts, [0 1], t);
結果をプロットします。元のウェイポイント、計算された多角形、および内挿された B スプラインを表示します。
figure; hold all plot(wpts1, wpts2, 'o'); plot(cpts(1,:), cpts(2,:), 'x-'); plot(q(1,:), q(2,:)); legend('Original waypoints', 'Computed control polygon', 'B-spline');
[1] Farin, Section 9.1
入力引数
controlPoints
— 制御多角形の点
n 行 p 列の行列
B スプライン軌跡の制御多角形の点。n 行 p 列の行列として指定します。ここで、n は軌跡の次元で、p は制御点の数です。
例: [1 4 4 3 -2 0; 0 1 2 4 3 1]
データ型: single
| double
tInterval
— 軌跡の開始時間と終了時間
2 要素ベクトル
軌跡の開始時間と終了時間。2 要素ベクトルとして指定します。
例: [0 10]
データ型: single
| double
出力引数
q
— 軌跡の位置
ベクトル
tSamples
で指定された時間サンプルにおける軌跡の位置。ベクトルとして返されます。
データ型: single
| double
qd
— 軌跡の速度
ベクトル
tSamples
で指定された時間サンプルにおける軌跡の速度。ベクトルとして返されます。
データ型: single
| double
qdd
— 軌跡の加速度
ベクトル
tSamples
で指定された時間サンプルにおける軌跡の加速度。ベクトルとして返されます。
データ型: single
| double
pp
— 区分的多項式
構造体
区分的多項式。区分的軌跡の各セクションの多項式を定義する構造体として返されます。mkpp
を使用して独自の区分的多項式を作成するか、ppval
を使用して指定した時間の多項式を評価できます。構造体には次のフィールドが含まれます。
form
:'pp'
.breaks
: 区分的軌跡が形を変える時間の p 要素ベクトル。p はウェイポイントの数です。coefs
: 多項式の係数の n(p–1) 行order
列の行列。n(p–1) は、軌跡の次元とpieces
の数の積です。n 行の各セットは、各変動軌跡を記述した多項式の係数を定義します。pieces
: p–1。ブレーク数から 1 を引いた値。order
:多項式の次数 + 1。たとえば、3 次多項式の次数は 4 です。dim
: n.制御点の位置の次元。
参照
[1] Farin, Gerald E. Curves and Surfaces for Computer Aided Geometric Design: A Practical Guide. San Diego, CA: Academic Press, 1993.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
バージョン履歴
R2019a で導入
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)