Wikiwand AI

ベジェ曲線

From Wikipedia, the free encyclopedia

ベジェ曲線(ベジェきょくせん、(英: Bézier curve)は N+1 個の制御点から得られる N 次曲線である。ベジエ曲線とも。

定義

以下の要素を所与とする:

  • 次数:
  • パラメータ:
  • 制御点: 個のベクトル

これらを用いて 次ベジェ曲線 は複数の表現により定義される。以下はその一例である。

バーンスタイン表現

バーンスタイン基底関数 を用いて、 次ベジェ曲線は以下のように定義される[1]:

この形式でのベジェ曲線の定義は「ベジェ曲線のバーンスタイン表現」とも呼ばれる[2][3]。

ド・カステリョのアルゴリズム

ベクトル に関する漸化式を以下のように定義する:

この漸化式を用い 次ベジェ曲線は で定義される[4]。

このアルゴリズムはド・カステリョのアルゴリズム(英: De Casteljau's algorithm)と呼ばれる。

陰関数表現

ベジェ曲線は、シルベスターやケイリーの方法により、陰関数 で表現できる[5]。

性質

端点と端制御点の一致

N 次ベジェ曲線の始点は端の制御点 と、終点はもう一方の端の制御点 と一致する。

バーンスタイン基底関数は , である(⇒バーンスタイン多項式#バーンスタイン基底関数の特性)。よってベジェ曲線を構成する殆どの項は端点において 0 となり , となる。つまり始点 が と、終点 が と一致する。

制御点の加重平均

10次のバーンスタイン基底関数。0≦t≦1

ベジェ曲線は制御点座標の加重平均と見做せる。

バーンスタイン基底関数は常に和が1であり(⇒バーンスタイン多項式#1の分割)[6]、かつ において非負である(⇒バーンスタイン多項式#区間非負)。よってベジェ曲線上の点 P(t=T) は各制御点 Bi が Jn, i(T) で重みづけされた加重平均と見做せる[7][6]。この意味で各バーンスタイン基底関数は混合比とも呼ばれる[6]。

全制御点の反映

ベジェ曲線の端点を除いた領域は、その座標が全ての制御点の座標から影響を受ける。

ベジェ曲線は制御点座標の加重平均であり(⇒#制御点の加重平均)、その重みであるバーンスタイン基底関数は において常に正である(⇒バーンスタイン多項式#区間正値)。よって端点以外では全制御点の座標が大なり小なり曲線の各点へ反映されている。端点は例外であり、単一制御点の座標のみで決定される。

制御点の通過

ベジェ曲線は一般には両端以外の制御点は通らない。

ベジェ曲線の制御点の加重平均特性により、制御点を必ず通る t = T が存在するなら Jn, i(T) が i = I で 1、他で 0 になる点があるはずである。図からわかるように、これは t = 0 or 1 のみに限られる。よって一般にはベジェ曲線は両端以外の制御点を通らない。制御点の座標によっては加重平均がたまたまある制御点と一致する場合がありうるので、制御点を通るのが常に両端のみ、というわけではない。

端点とその隣の制御点で端点の接線が定まる

と を結ぶ線分がベジェ曲線の始点における接線であり、 と を結ぶ線分が終点における接線である。[8]

凸包性

ベジェ曲線は制御点による凸包に含まれる。[9]

対称性

制御点の順序を逆にしてもベジェ曲線の形状は変化しない。[10]

アフィン不変性

アフィン写像されたベジェ曲線は、アフィン写像された制御点から求めたベジェ曲線と等しい[11]。 また、ベジェ曲線の特性(ループやカスプ、変曲点の有無と 軸上の位置)は、アフィン写像によって変化しない[12]。

パラメータのアフィン写像に対する不変性

パラメータをアフィン写像しても、ベジェ曲線は変化しない。 例として、パラメータの区間を から へアフィン写像しても、ベジェ曲線は変化しない。 [9]

重心結合に対する不変性

制御点からベジェ曲線を生成する過程で、重心結合が不変に保たれる。 例として、2つのベジェ曲線の加重平均は、各曲線の制御点それぞれの加重平均から求めたベジェ曲線と等しい。 [13]

線形再現性

制御点が直線上に等間隔で配置されている場合、ベジェ曲線は直線になり、 や は の線形関数になる(始点と終点を結ぶ直線が再現される)。 (等間隔でない場合も直線になるが、線形関数にはならない) [14]

曲率

ベジェ曲線の曲率は、以下のパラメトリック曲線の曲率の定義(英語版)により求めることができる。

分類

ベジェ曲線は制御点の数に基づいて分類される。以下はその一例である。

2次ベジェ曲線

2次ベジェ曲線の基底関数
ド・カステリョのアルゴリズムによる2次ベジェ曲線の描画

2次ベジェ曲線(英語版)(にじベジェきょくせん、(英: quadratic Bézier curve)は3つの制御点で構成されるベジェ曲線である。

2次ベジェ曲線は次の式で定義される[15]:

上式よりベジェ曲線の性質を満たすことが容易に確認できる。t の次数より2次ベジェ曲線は高々2次の曲線であると確認でき、代入によりP(0) = B0 と P(1) = B2 で両端制御点の通過が確認できる。

2次ベジェ曲線の行列形式

2次ベジェ曲線の陰関数表現

とすると、



となる。

2次ベジェ曲線の面積

曲線の始点と終点および原点で囲まれた領域の面積はガウスグリーンの定理[16]で求めることができる。

2次ベジェ曲線の分割[17]

ド・カステリョのアルゴリズムを用いて任意の で分割することができる。分割後の2曲線の制御点は と である。

2次→3次変換[18]

2次ベジェ曲線と等価な3次ベジェ曲線の制御点は である。

3次ベジェ曲線

3次ベジェ曲線の基底関数
ド・カステリョのアルゴリズムによる3次ベジェ曲線の描画

3次ベジェ曲線(英語版)(さんじベジェきょくせん、(英: cubic Bézier curve)は4つの制御点で構成されるベジェ曲線である[19]。

3次ベジェ曲線は次の式で定義される:

上式よりベジェ曲線の性質を満たすことが容易に確認できる。t の次数より3次ベジェ曲線は高々3次の曲線であると確認でき、代入による P(0) = B0 と P(1) = B3 で両端制御点の通過が確認できる。

P(t) を t で1階微分し端の制御点を代入することで、端点での接線ベクトルが求まる。これにより、

となり、端点とその隣の制御点で端点の接線が定まることがわかる[20]。

3次ベジェ曲線の行列形式[21]

3次ベジェ曲線の陰関数表現

とすると、

となる。

3次ベジェ曲線の類型、判別

3次ベジェ曲線は、変曲点、ループ(自己交差)、カスプ(尖点)、のいずれかを含む場合がある。以下類型に分類される [22][23] 。

3次ベジェ曲線の類型[24]

類型のどれにあてはまるかを判別するためには、まず、各制御点をアフィン写像して、 が 、 が 、 が である正準形式(英語版)に変換する。

各類型を正準形式に変換[25]

次に、正準形式に変換した を以下の判別図にプロットして判定する。

正準形式の判別図[26]

曲線上の任意の点の座標を とすると、変曲点は、曲率の定義より となる 、ループの交点は、 かつ となる である。ループの交点が重なる()場合はカスプになる。

正準形式を用いない場合、各類型は以下により判別し特異点を求めることができる[27][28][29]。

変曲点
カスプ
ループ

ただし、

とする。

3次ベジェ曲線の面積

以下は2つの3次ベジェ曲線 による と による の面積の例。 は制御点の並び順が原点に対し反時計回りなので面積は正の値、 は制御点の並び順が原点に対し時計回りなので面積は負の値になる。両者面積を合計することで閉包の面積が求まる。

3次ベジェ曲線の面積の例
3次ベジェ曲線の面積の例

3次ベジェ曲線の連続性

3次ベジェ曲線の分割

ド・カステリョのアルゴリズムを用いて任意の で分割することができる。分割後の2曲線の制御点は と である。

作図法

端点 P0, P3 および制御点 P1, P2 からなる3次ベジェ曲線

前節の数式を適宜変形するなどして、コンピュータプログラムに実装すれば描画はできるわけだが、以下では3次のベジェ曲線(4個の制御点で示される曲線)を例として、手作業を念頭に置いた作図法を示す。この手順を基にした描画プログラムにも有用性があり、また人によってはベジェ曲線の性質を直観的に把握するにも有効かもしれない。

右図の P0, P1, P2, P3 が与えられた制御点である。今、ベジェ曲線の P0 から t (0 < t < 1) の比率の位置の点の座標を求めるためには、次のように計算すればよい。

  1. まず、制御点を順に結んで得られる3つの線分 P0P1, P1P2, P2P3(水色の折れ線)をそれぞれ t : 1 − t の比率で分割する点、P4, P5, P6 を求める。
  2. 次に、これらの点を順に結んで得られる2つの線分 P4P5, P5P6(橙色の折れ線)を再びそれぞれ t : 1 − t の比率で分割する点 P7, P8 を求める。
  3. 最後に、この2点を結ぶ線分 P7P8(緑色の線分)をさらに t : 1 − t の比率で分割する点 P9 を求めると、この点がベジェ曲線上の点となる。
  4. この作業を 0 < t < 1 の範囲で繰り返し行うことにより、P0, P1, P2, P3 を制御点とする3次ベジェ曲線(赤色の曲線)が得られる。

交点の算出

図形分割による方法

ベジェ曲線は制御点から成る凸包に内包される性質を利用して、交点が存在する範囲を限定し曲線を切り出すことを反復するBezier clipping[30]がある。

代数方程式による方法(Implicitization)[31]

直線とベジェ曲線の交点は、直線の式の にベジェ曲線の式( など)を 代入した方程式を解くことで、交点候補の を求めることができる。 ベジェ曲線どうしの交点は、一方の曲線の陰関数に、他方の曲線の式を代入した陰伏方程式の実数根が交点候補となる。 交点候補は値域などの条件により交点か判定される。 この方法では、解の公式が存在しない高次方程式(3次ベジェ曲線どうしであれば9次方程式)の場合の解法が課題となる。 多数のベジェ曲線で構成された対象(PBRTのhairやfurなど)の3Dレイトレーシングにおいては、3次ベジェ曲線と直線の最小距離を求めるための5次方程式について、ブダン・フーリエの定理とヴァンサンの定理を用いて実根を分離し、ミュラー法やリダーズ法を反復なしで用いて効率良く所定の精度で根を求めることができる、との報告例[32]があり、この方針を3次ベジェ曲線どうしの交点算出に適用した実装例[33]が公開されている。

複合ベジェ曲線

複合ベジェ曲線の作図ツール画面例 方向ハンドルは、アンカーポイントに設定された連続性に応じて他のハンドルと連動する

複合ベジェ曲線(英: composite Bézier curve)はベジェ曲線を1つのセグメントとして複数セグメントを直列に接続した曲線である[注 1]。ベジェスプライン(英: Bézier spline)[34]、ポリベジェ曲線(英: polybezier)とも。

N次ベジェ曲線は次数を変えずに延長できない。なぜなら延長のために制御点を追加することで次数も増加するからである。またN次ベジェ曲線は既存区間に影響を与えずに延長できない。なぜなら全制御点の反映という特性により新しい制御点座標が既存の区間にも反映されるからである。

これに対する方策にはスプライン曲線をはじめとした区分多項式がある。区分多項式ではある区間を1つの多項式で表現し、その続きの区間を別の多項式で表現し、曲線全体を複数の多項式で構成する。新しい区間の多項式は既存区間と独立しているため、上記の次数増や既存区間影響の問題を回避できる[34]。これを採用し、ベジェ曲線で各区分を表現した区分多項式が複合ベジェ曲線である。

利用

用途

ベジェ曲線は様々な目的・用途に利用されている。

具体的には、ベジェ曲線は視覚芸術(絵画・アニメ・3DCGなど)に利用され、輪郭線の直接表現(参考: ドローソフト)、手書き線の補正[注 2](参考: ペイントソフト)、物体配置の補助線などとして用いられる。またフォント・カリグラフィー・タイポグラフィに利用される。工業デザインでも利用され、設計図中の物体を表現する曲線として直接表現される。GUIではグラフ型設定値の表現として用いられる。

ベジェ曲線のなかでも2次ベジェ曲線と3次ベジェ曲線は広く利用されている。特に3次ベジェ曲線は、始点と第1制御点を結ぶ線分が始点における曲線の接線になり、第2制御点と終点を結ぶ線分が終点における曲線の接線になるため、直感的に理解しやすく多用される。

サポート

ベジェ曲線は様々なプラットフォームでサポートされている。

PostScriptやそのフォント (Type1フォント)、SVGやHTML5のcanvasで3次ベジェ曲線を利用できる。Microsoft WindowsのGDI/GDI+、Direct2D、.NET FrameworkのSystem.Drawing.Drawing2D.GraphicsPath、WPFのSystem.Windows.Media.BezierSegmentでは3次ベジェをサポートする[35][36][37][38][39]。AWT(Java 1.2以降で追加されたQuadCurve2D, CubicCurve2Dの派生クラス)、SkiaのSkPathおよびAndroidのandroid.graphics.Pathは2次と3次のベジェ両方をサポートする[40][41][42]。

歴史

ベジェ曲線はフランスの自動車メーカー、シトロエン社のド・カステリョ(英語版) とルノー社のピエール・ベジェにより独立に考案された。ド・カステリョの方が先んじていたが、その論文が公知とならなかったためベジェの名が冠されている[43]。

名称

原語(フランス語)における Bézier の発音はベズィエに近く、「ベジェ曲線」より「ベジエ曲線」の方がこれに忠実と言えるが、いずれの呼称も用いられている。

ベジェ曲面

ベジェ曲面(曲面パッチなどとも)と呼ばれるような、3次元空間内の曲面への拡張にはいくつか手法がある。たとえば、目的の曲面においてパッチの端点となる3点とその3点における接平面を指定するという方法や、4点を指定し2方向のクロスハッチングのようにして面を構成するという方法がある。

脚注

参考文献

関連項目

外部リンク

Related Articles

Timelines

Top Qs

Fact Checks