BezierConverter
- Quiet · last change 5-23-2020
- ★ 5 on GitHub
README
BezierConverter
任意の次数の多項式(多項式基底)をバーンスタイン多項式、つまりベジエ曲線へ基底変換します。

アルゴリズム
係数の配列さえあれば、In-place で計算することができる。

▼ 多項式基底 ⇒ バーンスタイン基底
function PolyToBezi( const P_:TDoubleND ) :TDoubleND;
var
X, Y :Integer;
begin
Result.DimN := P_.DimN;
for X := 0 to Result.DimN-1 do Result[ X ] := P_[ X ] / Comb( DimN-1, X );
for Y := 1 to Result.DimN-1 do
begin
for X := Result.DimN-1 downto Y do Result[ X ] := Result[ X ] + Result[ X-1 ];
end;
end;▼ バーンスタイン基底 ⇒ 多項式基底
function BeziToPoly( const P_:TDoubleND ) :TDoubleND;
var
X, Y :Integer;
begin
  Result := TDoubleND.Create( P_ );
for Y := 1 to Result.DimN-1 do
begin
for X := Result.DimN-1 downto Y do Result[ X ] := Result[ X ] - Result[ X-1 ];
end;
for X := 0 to Result.DimN-1 do Result[ X ] := Result[ X ] * Comb( DimN-1, X );
end;任意次元のベクトルを扱う LUX.DN.TDoubleND レコード型を利用している。TDoubleND.DimN プロパティが次元数を示す。
Comb( n, k ) は 組合せ(Combination)数、つまり 二項係数 を返す関数。


