複合ベジェ曲線

やコンピュータグラフィックスにおいて、**複合ベジェ曲線**（ふくごうベジェきょくせん、英語: composite Bézier curve）または**ベジェスプライン**（英語: Bézier spline）とは、複数のベジェ曲線から構成されるスプラインであり、少なくとも C^0 連続である。
言い換えれば、複合ベジェ曲線とは一連のベジェ曲線であり、各曲線の終点が次の曲線の始点と一致するように端から端まで連結されている。
用途によっては、より高度な滑らかさ（例えば C^1 または C^2 の連続性）を求められる場合もある
。

連続した複合ベジェ曲線は、に似ていることから、**ポリベジェ**（英語: polybézier）とも呼ばれる。ただし、ポリラインでは点同士が直線で結ばれるのに対し、ポリベジェでは点同士がベジェ曲線で結ばれる。
**ベジェゴン**（または**ベジゴン**、英語: béziergon または bézigon）は、ベジェ曲線で構成された閉じたパスである。
複数の頂点を線で結ぶという点でポリゴンに似ているが、ポリゴンでは頂点が直線で結ばれるのに対し、ベジェゴンでは頂点がベジェ曲線で結ばれる。
「ベジェスプライン」は、C^0 連続の複合ベジェ曲線の呼称に用いられる場合がある
が、
（複合ではない）ベジェ曲線の呼称に用いられることもある。後者で複合の場合は、「複合」を前に付けて「複合ベジェスプライン」と表現される。

おそらく、複合ベジェ曲線の最も一般的な用途は、PostScriptやPDFファイル内の各文字のアウトラインを記述することである。
こうしたアウトラインは、開いた文字

では1つのベジェゴンで、閉じた文字

では複数のベジェゴンで構成される。
PostScript、Asymptote、Metafont、OpenType、SVGなどの現代のベクターグラフィックスやコンピュータフォントシステムでは、3次ベジェ曲線からなる複合ベジェ曲線が、曲線形状を描画するために使用されている。

## 滑らかな接続

一般的に、スプラインに求められる性質は、各曲線同士が所定のパラメトリックあるいは幾何学的連続性で接続されることである。
スプライン内の個々の曲線は、それぞれの定義区間内では C^\infin 連続を満たしているが、曲線同士の接合部では、常に何らかの不連続性が生じる。

ベジェスプラインはこの点においてやや特異で、C^0 を上回る連続性を保証しない数少ないスプラインのひとつである。
ただし、制御点の配置によって、接合部での連続性の度合いを保証することは可能である。しかし、ベジェスプラインの指定された次数に対して制約が厳しすぎる場合、局所的な制御性が失われる可能性がある。

### 3次ベジェ曲線の滑らかな接続
制御点が [\mathbf  P_0,\mathbf  P_1,\mathbf  P_2,\mathbf  P_3] と [\mathbf  P_3,\mathbf  P_4,\mathbf  P_5,\mathbf  P_6] である2つの3次ベジエ曲線の、点 \mathbf  P_3 での連続性が確保されるための条件は、次のように定義される：

* C^0/G^0（位置の連続性）：曲線が同じ点で接続されていれば良く、これはすべてのベジェスプラインが定義上、満たしている。この例では、両曲線は \mathbf  P_3 を共有している。
* C^1（速度の連続性）：接続点に隣接する制御点が互いに対称である必要がある。すなわち、次の条件を満たす必要がある：\mathbf  P_4=2\mathbf  P_3-\mathbf  P_2
* G^1（接線の連続性）：接続点と、隣接する制御点が共線である必要がある。これは C^1 よりも緩い条件で、スカラー \beta_1 を使用してパラメータ化できる自由度がある。次のように表現される：\mathbf  P_4=\mathbf  P_3+(\mathbf  P_3-\mathbf  P_2)\beta_1

以下の連続性の条件も理論上は可能だが、B-スプラインやβ-スプライン

などの他のスプラインが、局所制御性を損なうことなくより高い制約を自然に扱えるため、3次ベジェスプラインではほとんど使用されない。

* C^2（加速度の連続性）：次の条件を満たす必要がある：\mathbf  P_5 =\mathbf  P_1+4(\mathbf  P_3-\mathbf  P_2)ただし、この制約を3次ベジェスプライン全体に適用すると、接続点の局所制御性が連鎖的に失われる。曲線がスプラインの3点ごとに1点を通過することは保証されるが、形状の制御が困難になる。3次曲線を使用して C^2 連続性を実現するには、代わりに3次一様B-スプラインを使用することが推奨される。これにより、局所制御性を維持しつつ C^2 連続性を保証できるが、指定された点を通過する保証はなくなる。
* G^2（曲率の連続性）：次の条件を満たす必要がある：\mathbf  P_5=\mathbf  P_3+(\mathbf  P_3-\mathbf  P_2)(2\beta_1+\beta_1^2+\beta_2/2)+(\mathbf  P_1-\mathbf  P_2)\beta_1^2これは C^2 に比べて、2つのスカラー \beta_1 と \beta_2 による2つの自由度を残している。より高度な幾何学的連続性も可能であるが、計算と制御は複雑になる。
* C^3（衝撃の連続性）：次の条件を満たす必要がある：\mathbf  P_6=\mathbf  P_3+(\mathbf  P_3-\mathbf  P_0)+6(\mathbf  P_1-\mathbf  P_2+\mathbf  P_3-\mathbf  P_2)この制約を3次ベジェスプラインに適用すると、局所制御性が完全に失われ、スプライン全体が最初の曲線の制御点によって完全に決まってしまう。実際、これはもはやスプラインとは言えず、最初の曲線を無限に外挿した形状に等しくなり、個々の曲線の接続がなくなることで C^3 どころか C^\infin の連続性を持つことになる。

#### 連続性の条件式の導出
[\mathbf  P_0,\mathbf  P_1,\mathbf  P_2,\mathbf  P_3] による3次ベジェ曲線を \mathbf{l}(u)、
[\mathbf  P_3,\mathbf  P_4,\mathbf  P_5,\mathbf  P_6] による3次ベジェ曲線を \mathbf{r}(t)とする。


\mathbf{l}(u)=
\begin{bmatrix}
u^3 & u^2 & u & 1
\end{bmatrix}
\begin{bmatrix}
-1 & 3 & -3 & 1 \\
3 & -6 & 3 & 0 \\
-3 & 3 & 0 & 0 \\
1 & 0 & 0 & 0
\end{bmatrix}
\begin{bmatrix}
\mathbf  P_0 \\
\mathbf  P_1 \\
\mathbf  P_2 \\
\mathbf  P_3
\end{bmatrix}
, \quad
\mathbf{r}(t)=
\begin{bmatrix}
t^3 & t^2 & t & 1
\end{bmatrix}
\begin{bmatrix}
-1 & 3 & -3 & 1 \\
3 & -6 & 3 & 0 \\
-3 & 3 & 0 & 0 \\
1 & 0 & 0 & 0
\end{bmatrix}
\begin{bmatrix}
\mathbf  P_3 \\
\mathbf  P_4 \\
\mathbf  P_5 \\
\mathbf  P_6
\end{bmatrix}


\mathbf{l}(u) の終了点（u=1）と、
\mathbf{r}(t) の開始点（t=0）における導関数は以下の通り。


\mathbf{l}'(1) =
\begin{bmatrix} 0 & 0 & -3 & 3 \end{bmatrix}
\begin{bmatrix}
\mathbf  P_0 \\
\mathbf  P_1 \\
\mathbf  P_2 \\
\mathbf  P_3
\end{bmatrix}
, \quad
\mathbf{r}'(0) =
\begin{bmatrix} -3 & 3 & 0 & 0 \end{bmatrix}
\begin{bmatrix}
\mathbf  P_3 \\
\mathbf  P_4 \\
\mathbf  P_5 \\
\mathbf  P_6
\end{bmatrix}



\mathbf{l}*(1) =
\begin{bmatrix} 0 & 6 & -12 & 6 \end{bmatrix}
\begin{bmatrix}
\mathbf  P_0 \\
\mathbf  P_1 \\
\mathbf  P_2 \\
\mathbf  P_3
\end{bmatrix}
, \quad
\mathbf{r}*(0) =
\begin{bmatrix} 6 & -12 & 6 & 0 \end{bmatrix}
\begin{bmatrix}
\mathbf  P_3 \\
\mathbf  P_4 \\
\mathbf  P_5 \\
\mathbf  P_6
\end{bmatrix}


したがい、\mathbf  P_3-\mathbf  P_2 = \mathbf  P_4-\mathbf  P_3 であれば C^1 連続であり、
さらに、\mathbf  P_1-2\mathbf  P_2+\mathbf  P_3 = \mathbf  P_3-2\mathbf  P_4+\mathbf  P_5 であれば C^2 連続である。
これらから、上記 C^1 および C^2 の条件式が得られる。

また、曲線の G^n 連続性の定理により、

\mathbf{r}'(0) = {\beta}_1 \mathbf{l}'(1)

であれば G^1 連続である。さらに、

\mathbf{r}*(0) = {\beta}_1^2 \mathbf{l}*(1) + {\beta}_2 \mathbf{l}'(1)

であれば G^2 連続である。
これらから、上記 G^1 および G^2 の条件式が得られる。

## 円弧の近似
特定の環境で円弧のプリミティブがサポートされていない場合、ベジェ曲線で近似することができる
。
一般的に、円を近似するには8つの2次（曲線）セグメント、または4つの3次セグメントが使用される。
与えられた数の3次セグメントによる近似誤差が最小となる、制御点の長さ \mathbf{k} を求めることを目指す。

### 4つの曲線を使用
第一象限の90度の単位円弧のみを考慮して、端点 \mathbf{A} と \mathbf{B}、および制御点 \mathbf{A'} と \mathbf{B'} を次のように定義する：

:
\begin{align}
\mathbf{A} & = [0, 1] \\
\mathbf{A'} & = [\mathbf{k}, 1] \\
\mathbf{B'} & = [1, \mathbf{k}] \\
\mathbf{B} & = [1, 0] \\
\end{align}


3次ベジェ曲線の定義から次の式が得られる：

:\mathbf{C}(t)=(1-t)^3\mathbf{A} + 3(1-t)^2t\mathbf{A'}+3(1-t)t^2\mathbf{B'}+t^3\mathbf{B}

ポイント \mathbf{C}(t=0.5) を円弧の中点とすると、次の2つの方程式を立てることができる：

:
\begin{align}
\mathbf{C} &= \frac{1}{8}\mathbf{A} + \frac{3}{8}\mathbf{A'}+\frac{3}{8}\mathbf{B'}+\frac{1}{8}\mathbf{B} \\
\mathbf{C} &= \sqrt{1/2} = \sqrt{2}/2
\end{align}


これらの方程式をx座標について（y座標についても同様に）解くと、次のようになる：

:\frac{0}{8}\mathbf + \frac{3}{8}\mathbf{k}+\frac{3}{8} + \frac{1}{8} = \sqrt{2}/2
:\mathbf{k} = \frac{4}{3}(\sqrt{2} - 1) \approx 0.5522847498

ただし、結果として得られるベジェ曲線は円の外側に完全に出ており、半径の最大偏差は約0.00027である。
中間点に小さな補正：

:
\begin{align}
\mathbf{A'} & = [\mathbf{k}+0.0009, 1-0.00103] \\
\mathbf{B'} & = [1-0.00103, \mathbf{k}+0.0009] ,
\end{align}


を加えることで、半径の偏差は、およそ3分の1に減少して 0.000068 になる（近似円曲線の端点における微分可能性が犠牲になる）。

### 一般的なケース
半径 R の円は、任意の数の3次ベジェ曲線で近似することができる。
円弧の始点は点 \mathbf{A}、終点は点 \mathbf{B} とし、これらの点はx軸を挟んで上下対称の位置に配置され、円弧がなす角度は \theta = 2\phi とすると：

:\begin{align}
\mathbf{A}_x &= R\cos(\phi) \\
\mathbf{A}_y &= R\sin(\phi) \\
\mathbf{B}_x &= \mathbf{A}_x \\
\mathbf{B}_y &= -\mathbf{A}_y
\end{align}

制御点は次のように表記できる
：

:\begin{align}
\mathbf{A'}_x &= \frac{4R - \mathbf{A}_x}{3} \\
\mathbf{A'}_y &= \frac{(R - \mathbf{A}_x)(3R - \mathbf{A}_x)}{3\mathbf{A}_y} \\
\mathbf{B'}_x &= \mathbf{A'}_x \\
\mathbf{B'}_y &= -\mathbf{A'}_y
\end{align}

### 例

File:Circle and quadratic bezier.svg|円（黒）を近似する8セグメントの2次複合ベジェ曲線（赤）と制御点
File:Circle and cubic bezier.svg|円（黒）を近似する4セグメントの3次複合ベジェ曲線（赤）と制御点


## フォント
TrueTypeフォントでは、**2次**ベジェ曲線（2次曲線）で構成される複合ベジェ曲線が使用されている。
一般的な書体デザインをコンピュータフォントとして一定の精度で表現するには、3次ベジェ曲線の方が2次ベジェ曲線よりもデータ量が少なく、さらに3次ベジェ曲線は一連の直線よりもデータ量が少なくなる。
これは、直線の1セグメントに必要なデータ量が放物線の1セグメントに必要なデータ量よりも少なく、さらに放物線の1セグメントに必要なデータ量が3次曲線の1セグメントに必要なデータ量よりも少ない場合であっても当てはまる。

## 複合ベジェ曲線の作図

3次ベジェ曲線からなる3次の複合ベジェ曲線は複雑な図形を描くためによく実利用されるため、様々な作図法が考案されている。またベジェ曲線の数学的理解無しで直感的に複合ベジェ曲線を描くために、いくつかの用語がしばしば導入されている。

### アンカーポイント
**アンカーポイント**（）はセグメント端点にある制御点の別名である。**頂点**（）、**パスポイント**（）、**通過点**とも。端点と端制御点の一致特性により、ベジェ曲線はアンカーポイント間を繋ぐ曲線とみなせる。セグメントが通らない制御点（=方向ハンドル）との区別を直感的にするためにこの用語が導入されている。

### 方向ハンドル
はセグメント端点の隣にある制御点の別名である。**方向点**とも。方向線の先端に位置する。アンカーポイントと区別することで直接曲線は通らないが曲がり方を決定づけるということを直感的に理解できる。

### 方向線
はセグメント端点から隣の制御点へ伸びる直線である。3次ベジェ曲線では端点での接線ベクトルが隣の制御点へ伸びるベクトルと同じ向きであるため（詳細: 3次ベジェ曲線）、方向線の概念を導入すれば端点での傾きと隣接制御点（=方向ハンドル）の位置を同時に視認できる。

### アンカーポイントと方向線による滑らかさ制御
複合ベジェ曲線は滑らかさの保証に制約を要する（⇒3次ベジェ曲線の滑らかな接続）。これは各アンカーポイントから伸びる2つの方向線のあいだにどのような制約を課すかで表現できる。

方向線が左右対称であれば接線が一致するため必ず滑らかになる。この制約が課されたアンカーポイントは**スムーズポイント**（）、設定そのものは**シンメトリック**（）、**曲線**、**スムーズ**（） などと呼称される。

多くのソフトウェアでは「mousedown でアンカーポイント設定、drag で方向ハンドル調整、mouseup で確定」を繰り返すことで滑らかな複合ベジェ曲線を作図できる。2ハンドルの連動（smooth 状態）を alt で切り離す、といった操作もしばしば実装されている。

## 画像から複合ベジェ曲線への変換

フォントやロゴデータの作成、紙図面からのCADデータ逆生成など、多くの場面で画像からベクターデータへの変換が行われる。
変換にはAdobe Illustratorなどの商用ソフトウェアのほか、AutoTrace

や
などのオープンソースソフトウェアも利用される
。
以下は、AutoTraceを用いたEPSへの変換例で、画像の輪郭が複数の3次ベジェ曲線と直線から成る図形表現に変換されている。
ベジェ曲線間の接続はおおむね滑らかだが、急峻な屈曲ではそうならない場合もある。

## 脚注

### 訳注

### 出典

## 関連項目
* ベジェ曲線
* B-スプライン曲線
* スプライン曲線
* 滑らかな関数
* 
* 
*