018_BezierCurves.mw

ベジェ曲線

イントロダクション

このワークシートでは、座標点について2次元パラメトッリック曲線のベジェ曲線を求めるプロシージャを作成し実行します。

下記のプロシージャで入力しているのは、4つの位置、ベジェ曲線の制御多角形を構成する P 及びポイント数 numpoints からベジェ曲線を表します。このプロシージャの出力はポイント P とベジェ曲線のグラフが出力されます。

> restart;

プロシージャ

> Bezier:=proc(numpoints,P)
 local t,i,vvv,vvu,vuu,uuu,delta,Curve,bezier_curve, points;
 t:=0.0;
 Curve:=Array(1..numpoints+1,1..2);
 delta:=1/numpoints;
 for i from 0 by 1 to numpoints do
   vvv:=(1.0-t)*(1.0-t)*(1.0-t);
   vvu:=3*(1.0-t)*(1.0-t)*t;
   vuu:=3*(1.0-t)*t*t;
   uuu:=t*t*t;
   Curve[i+1,1]:=P[1,1]*vvv + P[2,1]*vvu + P[3,1]*vuu + P[4,1]*uuu;
   Curve[i+1,2]:=P[1,2]*vvv + P[2,2]*vvu + P[3,2]*vuu + P[4,2]*uuu;
   t:=t+delta;
 od;
 bezier_curve:=plot(convert(Curve,listlist)):
 points:=plots[pointplot](P,color=blue,symbol=circle):
 plots[display]([bezier_curve,points]):
end:

Bezier プロシージャを使用してみます。

> P:=[[1,2],[2,6],[4,4],[5,3]];

P := [[1, 2], [2, 6], [4, 4], [5, 3]]

> Bezier(50,P);

[Plot]

> P:=[[2,0],[-3,4],[0,2],[4,4]];

P := [[2, 0], [-3, 4], [0, 2], [4, 4]]

> Bezier(50,P);

[Plot]

> P:=[[10,5],[4,-2],[8,1],[-2,-2]];

P := [[10, 5], [4, -2], [8, 1], [-2, -2]]

> Bezier(50,P);

[Plot]