ベジェ曲線は、通常はtと呼ばれる無関係なパラメーターに基づいて点のセットを取得する方法を定義します。完全な曲線をレンダリングするには、tを0から1の間で評価し、各ポイントから次のポイントに線を引きます。完全な曲線よりも少なくレンダリングするには、tを0から1未満の数値まで評価します。曲線の描画をアニメーション化するには、ポイントを評価し、タイマーでセグメントを描画します。
任意のtでベジェ曲線を分割できます。そうすることで、曲線をシステムに渡して描画したり、CAShapeLayerで使用したりできるようになります。
手書きの文字は通常、一連のベジェ曲線またはベジェスプラインになります。ある曲線の終点が次の曲線の始点です。tは、ゼロからスプライン内のセグメントの数になると考えてください。3つの曲線がある場合、tは0から3になると考えてください。tが1から2の場合、最初のセグメント全体と2番目のセグメントの一部をシステムに渡して描画します。
ベジェ曲線を分割するためのDeCasteljauのアルゴリズムについて読むことができます。平面上の3次ベジェ曲線のコードサンプルを次に示します。
// initial curve is four point x0,y0 , x1,y1 , x2,y2 , x3,y3
// x0,y0 and x3,y3 are the anchors
// point to split curve at is 0<t<1
nt = 1.0 - t;
x01 = nt * x0 + t * x1;
y01 = nt * y0 + t * y1;
x12 = nt * x1 + t * x2;
y12 = nt * y1 + t * y2;
x23 = nt * x2 + t * x3;
y23 = nt * y2 + t * y3;
x012 = nt * x01 + t * x12;
y012 = nt * y01 + t * y12;
x123 = nt * x12 + t * x23;
y123 = nt * y12 + t * y23;
x0123 = nt * x012 + t * x123;
y0123 = nt * y012 + t * y123;
// now the new curve you want is
// x0,y0 , x01,y01 , x012,y012 , x0123,y0123
// the other half of the curve, discarded in your case, is
// x0123,y0123 , x123,y123 , x23,y23 , x3,y3
したがって、手書きの文字を表す一連の曲線が与えられた場合、0からTまでアニメートします。ここでTは曲線の数です。t = T-floor(T)を計算し、tがゼロでない場合は、それを使用してn = floor(T)で曲線を分割します。