ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bernsteinMatrix

バーンスタイン行列

構文

B = bernsteinMatrix(n,t)

説明

t がベクトルである場合、B = bernsteinMatrix(n,t) は、B(i,k+1)= nchoosek(n,k)*t(i)^k*(1-t(i))^(n-k) を満たす length(t)(n+1) 列のバーンスタイン行列 B を返します。ここで、インデックス i は 1 から length(t) まで、インデックス k0 から n まで実行されます。

このバーンスタイン行列は、ベジエ行列とも呼ばれています。

バーンスタイン行列を使って次のようにベジエ曲線を構築します。

bezierCurve = bernsteinMatrix(n, t)*P
このとき、行列 Pn+1 行でベジエ曲線の制御点を指定します。たとえば、2 次の 3 次元ベジエ曲線を構築するには、制御点を以下のように指定します。
P = [p0x, p0y, p0z;  p1x, p1y, p1z;  p2x, p2y, p2z]

2 次元ベジエ曲線

制御点 p0 = [0 1]p1 = [4 3]p2 = [6 2]p3 = [3 0]p4 = [2 4] で指定される 4 次のベジエ曲線をプロットします。行列を作成して各行が 1 つの制御点を表すようにします。

P = [0 1; 4 3; 6 2; 3 0; 2 4];

4 次のバーンスタイン行列 B を計算します。

syms t
B = bernsteinMatrix(4, t)
B =
[ (t - 1)^4, -4*t*(t - 1)^3, 6*t^2*(t - 1)^2, -4*t^3*(t - 1), t^4]

ベジエ曲線を作成します。

bezierCurve = simplify(B*P)
bezierCurve =
[ -2*t*(- 5*t^3 + 6*t^2 + 6*t - 8), 5*t^4 + 8*t^3 - 18*t^2 + 8*t + 1]

曲線をプロットしてプロットに制御点を追加します。

fplot(bezierCurve(1), bezierCurve(2), [0, 1])
hold on
scatter(P(:,1), P(:,2),'filled')
title('Fourth-order Bezier curve')
hold off

3 次元ベジエ曲線

制御点の 4 行 3 列の行列 P で指定される 3 次元のベジエ曲線を作成します。それぞれの制御点が行列 P の 1 行に対応しています。

P = [0 0 0; 2 2 2; 2 -1 1; 6 1 3];

3 次のバーンスタイン行列を計算します。

syms t
B = bernsteinMatrix(3,t)
B =
[ -(t - 1)^3, 3*t*(t - 1)^2, -3*t^2*(t - 1), t^3]

ベジエ曲線を作成します。

bezierCurve = simplify(B*P)
bezierCurve =
[ 6*t*(t^2 - t + 1), t*(10*t^2 - 15*t + 6), 3*t*(2*t^2 - 3*t + 2)]

曲線をプロットしてプロットに制御点を追加します。

fplot3(bezierCurve(1), bezierCurve(2), bezierCurve(3), [0, 1])
hold on
scatter3(P(:,1), P(:,2), P(:,3),'filled')
hold off

評価点がベクトルとして指定される 3 次元ベジエ曲線

評価点が 1101 列のベクトル t として指定される 3 次のベジエ曲線を作成します。

t = 0:1/100:1;

3 次の 1014 列のバーンスタイン行列を計算し、制御点を指定します。

B = bernsteinMatrix(3,t);
P = [0 0 0; 2 2 2; 2 -1 1; 6 1 3];

ベジエ曲線を作成し、プロットします。プロットにグリッド線と制御点を追加します。

bezierCurve = B*P;
plot3(bezierCurve(:,1), bezierCurve(:,2), bezierCurve(:,3))
hold on
grid
scatter3(P(:,1), P(:,2), P(:,3),'filled')
hold off

入力引数

すべて折りたたむ

近似階数。非負の整数として指定します。

評価点。数値、シンボリックな数値、変数、式またはベクトルとして指定します。

出力引数

すべて折りたたむ

バーンスタイン行列。length(t)n+1 列の行列として返されます。

R2013b で導入