出典: フリー百科事典『ウィキペディア(Wikipedia)』
ベジェ曲線 ( ベジェきょくせん 、( 英 : Bézier curve ) は N+1 個の制御点から得られる N 次曲線 である。ベジエ曲線 とも。
以下の要素を所与とする:
次数:
N
∈
N
{\displaystyle N\in {\mathbb {N}}}
パラメータ:
t
∈
R
,
0
≤
t
≤
1
{\displaystyle t\in {\mathbb {R}},\ 0\leq t\leq 1}
制御点:
N
+
1
{\displaystyle N+1}
個のベクトル
{
B
i
|
i
∈
{
0
,
1
,
.
.
.
,
N
}
}
{\displaystyle \{\mathbf {B} _{i}\ |\ i\in \{0,1,...,N\}\}}
これらを用いて
N
{\displaystyle N}
次ベジェ曲線
P
(
t
)
{\displaystyle \mathbf {P} (t)}
は複数の表現により定義される。以下はその一例である。
バーンスタイン基底関数
J
N
,
j
(
t
)
{\displaystyle J_{N,j}(t)}
を用いて、
N
{\displaystyle N}
次ベジェ曲線は以下のように定義される[ 1] :
P
(
t
)
=
∑
i
=
0
N
B
i
J
N
,
i
(
t
)
=
∑
i
=
0
N
B
i
(
N
i
)
t
i
(
1
−
t
)
N
−
i
{\displaystyle \mathbf {P} (t)=\sum _{i=0}^{N}\mathbf {B} _{i}J_{N,i}(t)=\sum _{i=0}^{N}\mathbf {B} _{i}{N \choose i}t^{i}(1-t)^{N-i}}
この形式でのベジェ曲線の定義は「ベジェ曲線のバーンスタイン表現」とも呼ばれる[ 2] [ 3] 。
ベクトル
B
i
r
(
t
)
{\displaystyle \mathbf {B} _{i}^{r}(t)}
に関する漸化式 を以下のように定義する:
B
i
r
(
t
)
=
{
B
i
(
t
)
,
r
=
0
,
i
∈
{
0
,
1
,
.
.
.
,
N
}
(
1
−
t
)
B
i
r
−
1
(
t
)
+
t
B
i
+
1
r
−
1
(
t
)
,
r
∈
{
1
,
.
.
.
,
N
}
,
i
∈
{
0
,
1
,
.
.
.
,
N
−
r
}
{\displaystyle \mathbf {B} _{i}^{r}(t)={\begin{cases}\mathbf {B} _{i}(t),&r=0,&i\in \{0,1,...,N\}\\(1-t)\mathbf {B} _{i}^{r-1}(t)+t\mathbf {B} _{i+1}^{r-1}(t),&r\in \{1,...,N\},&i\in \{0,1,...,N-r\}\\\end{cases}}}
この漸化式を用い
N
{\displaystyle N}
次ベジェ曲線は
P
(
t
)
=
B
0
N
(
t
)
{\displaystyle \mathbf {P} (t)=\mathbf {B} _{0}^{N}(t)}
で定義される[ 4] 。
このアルゴリズムはド・カステリョのアルゴリズム (英 : De Casteljau's algorithm )と呼ばれる。
ベジェ曲線は、シルベスターやケイリーの方法により、陰関数
F
(
x
,
y
)
=
0
{\displaystyle F(x,y)=0}
で表現できる[ 5] 。
N 次ベジェ曲線の始点は端の制御点
B
0
{\displaystyle \mathbf {B} _{0}}
と、終点はもう一方の端の制御点
B
N
{\displaystyle \mathbf {B} _{N}}
と一致する。
バーンスタイン基底関数 は
J
N
,
i
(
0
)
=
δ
i
,
0
{\displaystyle J_{N,i}(0)=\delta _{i,0}}
,
J
N
,
i
(
1
)
=
δ
i
,
N
{\displaystyle J_{N,i}(1)=\delta _{i,N}}
である(⇒バーンスタイン多項式#バーンスタイン基底関数の特性 )。よってベジェ曲線を構成する殆どの項は端点において 0 となり
P
(
0
)
=
B
0
1
{\displaystyle \mathbf {P} (0)=\mathbf {B} _{0}1}
,
P
(
1
)
=
B
N
1
{\displaystyle \mathbf {P} (1)=\mathbf {B} _{N}1}
となる。つまり始点
P
(
0
)
{\displaystyle \mathbf {P} (0)}
が
B
0
{\displaystyle \mathbf {B} _{0}}
と、終点
P
(
1
)
{\displaystyle \mathbf {P} (1)}
が
B
N
{\displaystyle \mathbf {B} _{N}}
と一致する。
10次のバーンスタイン基底関数。0≦t≦1
ベジェ曲線は制御点座標の加重平均 と見做せる。
バーンスタイン基底関数は常に和が1であり(⇒バーンスタイン多項式#1の分割 )[ 6] 、かつ
0
≤
t
≤
1
{\displaystyle 0\leq t\leq 1}
において非負である(⇒バーンスタイン多項式#区間非負 )。よってベジェ曲線上の点 P (t =T ) は各制御点 B i が J n , i (T ) で重みづけされた加重平均と見做せる[ 7] [ 6] 。この意味で各バーンスタイン基底関数は混合比とも呼ばれる[ 6] 。
ベジェ曲線の端点を除いた領域は、その座標が全ての制御点の座標から影響を受ける。
ベジェ曲線は制御点座標の加重平均であり(⇒#制御点の加重平均 )、その重みであるバーンスタイン基底関数は
0
<
t
<
1
{\displaystyle 0<t<1}
において常に正である(⇒バーンスタイン多項式#区間正値 )。よって端点以外では全制御点の座標が大なり小なり曲線の各点へ反映されている。端点は例外であり、単一制御点の座標のみで決定される。
ベジェ曲線は一般には両端以外の制御点は通らない。
ベジェ曲線の制御点の加重平均 特性により、制御点を必ず通る t = T が存在するなら J n , i (T ) が i = I で 1、他で 0 になる点があるはずである。図からわかるように、これは t = 0 or 1 のみに限られる。よって一般にはベジェ曲線は両端以外の制御点を通らない。制御点の座標によっては加重平均がたまたまある制御点と一致する場合がありうるので、制御点を通るのが常に両端のみ、というわけではない。
制御点の順序を逆にしてもベジェ曲線の形状は変化しない。[ 10]
アフィン写像 されたベジェ曲線は、アフィン写像された制御点から求めたベジェ曲線と等しい[ 11] 。
また、ベジェ曲線の特性(ループやカスプ、変曲点の有無と
t
{\displaystyle t}
軸上の位置)は、アフィン写像によって変化しない[ 12] 。
パラメータをアフィン写像しても、ベジェ曲線は変化しない。
例として、パラメータの区間を
[
0
,
1
]
{\displaystyle [0,1]}
から
[
a
,
b
]
{\displaystyle [a,b]}
へアフィン写像しても、ベジェ曲線は変化しない。
[ 9]
制御点からベジェ曲線を生成する過程で、重心結合が不変に保たれる。
例として、2つのベジェ曲線の加重平均は、各曲線の制御点それぞれの加重平均から求めたベジェ曲線と等しい。
[ 13]
ベジェ曲線の曲率は、以下のパラメトリック曲線の曲率の定義 (英語版 ) により求めることができる。
k
=
x
′
y
″
−
y
′
x
″
(
x
′
2
+
y
′
2
)
′
3
/
2
{\displaystyle k={\frac {x'y''-y'x''}{{\bigl (}{x'}^{2}+{y'}^{2}{\bigr )}{\vphantom {'}}^{3/2}}}}
ベジェ曲線は制御点の数に基づいて分類される。以下はその一例である。
2次ベジェ曲線の基底関数
ド・カステリョのアルゴリズムによる2次ベジェ曲線の描画
2次ベジェ曲線 (英語版 ) ( にじベジェきょくせん 、( 英 : quadratic Bézier curve ) は3つの制御点で構成されるベジェ曲線である。
2次ベジェ曲線は次の式で定義される[ 15] :
P
(
t
)
=
∑
i
=
0
2
B
i
J
2
,
i
(
t
)
=
(
1
−
t
)
2
B
0
+
2
t
(
1
−
t
)
B
1
+
t
2
B
2
=
(
B
0
−
2
B
1
+
B
2
)
t
2
+
(
−
2
B
0
+
2
B
1
)
t
+
B
0
{\displaystyle {\begin{aligned}\mathbf {P} (t)&=\sum _{i=0}^{2}\mathbf {B} _{i}J_{2,i}(t)\\&=(1-t)^{2}\mathbf {B} _{0}+2t(1-t)\mathbf {B} _{1}+t^{2}\mathbf {B} _{2}\\&=(\mathbf {B} _{0}-2\mathbf {B} _{1}+\mathbf {B} _{2})t^{2}+(-2\mathbf {B} _{0}+2\mathbf {B} _{1})t+\mathbf {B} _{0}\\\end{aligned}}}
上式よりベジェ曲線の性質を満たすことが容易に確認できる。t の次数より2次ベジェ曲線は高々 2次の曲線であると確認でき、代入によりP (0) = B 0 と P (1) = B 2 で両端制御点の通過が確認できる。
P
(
t
)
=
[
t
2
t
1
]
[
1
−
2
1
−
2
2
0
1
0
0
]
[
B
0
B
1
B
2
]
{\displaystyle \mathbf {P} (t)={\begin{bmatrix}t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}1&-2&1\\-2&2&0\\1&0&0\end{bmatrix}}{\begin{bmatrix}\mathbf {B} _{0}\\\mathbf {B} _{1}\\\mathbf {B} _{2}\end{bmatrix}}}
曲線の始点と終点および原点で囲まれた領域の面積はガウスグリーンの定理 [ 16] で求めることができる。
S
=
1
6
[
B
0
x
B
1
x
B
2
x
]
[
0
2
1
−
2
0
2
−
1
−
2
0
]
[
B
0
y
B
1
y
B
2
y
]
{\displaystyle S={\frac {1}{6}}{\begin{bmatrix}{B_{0}}_{x}&{B_{1}}_{x}&{B_{2}}_{x}\end{bmatrix}}{\begin{bmatrix}0&2&1\\-2&0&2\\-1&-2&0\end{bmatrix}}{\begin{bmatrix}{B_{0}}_{y}\\{B_{1}}_{y}\\{B_{2}}_{y}\end{bmatrix}}}
2次ベジェ曲線と等価な3次ベジェ曲線の制御点は
[
B
0
B
0
+
2
B
1
3
2
B
1
+
B
2
3
B
2
]
{\displaystyle {\begin{bmatrix}\mathbf {B} _{0}&{\frac {\mathbf {B} _{0}+2\mathbf {B} _{1}}{3}}&{\frac {2\mathbf {B} _{1}+\mathbf {B} _{2}}{3}}&\mathbf {B} _{2}\end{bmatrix}}}
である。
3次ベジェ曲線の基底関数
ド・カステリョのアルゴリズムによる3次ベジェ曲線の描画
3次ベジェ曲線 (英語版 ) ( さんじベジェきょくせん 、( 英 : cubic Bézier curve ) は4つの制御点で構成されるベジェ曲線である[ 19] 。
3次ベジェ曲線は次の式で定義される:
P
(
t
)
=
∑
i
=
0
3
B
i
J
3
,
i
(
t
)
=
(
1
−
t
)
3
B
0
+
3
t
(
1
−
t
)
2
B
1
+
3
t
2
(
1
−
t
)
B
2
+
t
3
B
3
=
(
−
B
0
+
3
B
1
−
3
B
2
+
B
3
)
t
3
+
(
3
B
0
−
6
B
1
+
3
B
2
)
t
2
+
(
−
3
B
0
+
3
B
1
)
t
+
B
0
{\displaystyle {\begin{aligned}\mathbf {P} (t)&=\sum _{i=0}^{3}\mathbf {B} _{i}J_{3,i}(t)\\&=(1-t)^{3}\mathbf {B} _{0}+3t(1-t)^{2}\mathbf {B} _{1}+3t^{2}(1-t)\mathbf {B} _{2}+t^{3}\mathbf {B} _{3}\\&=(-\mathbf {B} _{0}+3\mathbf {B} _{1}-3\mathbf {B} _{2}+\mathbf {B} _{3})t^{3}+(3\mathbf {B} _{0}-6\mathbf {B} _{1}+3\mathbf {B} _{2})t^{2}+(-3\mathbf {B} _{0}+3\mathbf {B} _{1})t+\mathbf {B} _{0}\\\end{aligned}}}
上式よりベジェ曲線の性質を満たすことが容易に確認できる。t の次数より3次ベジェ曲線は高々 3次の曲線であると確認でき、代入による P (0) = B 0 と P (1) = B 3 で両端制御点の通過が確認できる。
P (t ) を t で1階微分し端の制御点を代入することで、端点での接線ベクトルが求まる。これにより、
d
P
(
t
)
d
t
=
∑
i
=
0
3
B
i
J
3
,
i
(
t
)
=
−
3
(
1
−
t
)
2
B
0
+
(
9
t
2
−
12
t
+
3
)
B
1
+
(
−
9
t
2
+
6
t
)
B
2
+
3
t
2
B
3
=
3
(
−
B
0
+
3
B
1
−
3
B
2
+
B
3
)
t
2
+
2
(
3
B
0
−
6
B
1
+
3
B
2
)
t
+
3
(
−
B
0
+
B
1
)
{\displaystyle {\begin{aligned}{d\mathbf {P} (t) \over dt}&=\sum _{i=0}^{3}\mathbf {B} _{i}J_{3,i}(t)\\&=-3(1-t)^{2}\mathbf {B} _{0}+(9t^{2}-12t+3)\mathbf {B} _{1}+(-9t^{2}+6t)\mathbf {B} _{2}+3t^{2}\mathbf {B} _{3}\\&=3(-\mathbf {B} _{0}+3\mathbf {B} _{1}-3\mathbf {B} _{2}+\mathbf {B} _{3})t^{2}+2(3\mathbf {B} _{0}-6\mathbf {B} _{1}+3\mathbf {B} _{2})t+3(-\mathbf {B} _{0}+\mathbf {B} _{1})\\\end{aligned}}}
d
P
(
0
)
d
t
=
3
(
−
B
0
+
B
1
)
=
3
B
0
B
1
→
d
P
(
1
)
d
t
=
3
(
−
B
2
+
B
3
)
=
3
B
2
B
3
→
{\displaystyle {\begin{array}{lcl}{d\mathbf {P} (0) \over dt}&=&3(-\mathbf {B} _{0}+\mathbf {B} _{1})&=3{\overrightarrow {\mathbf {B} _{0}\mathbf {B} _{1}}}\\{d\mathbf {P} (1) \over dt}&=&3(-\mathbf {B} _{2}+\mathbf {B} _{3})&=3{\overrightarrow {\mathbf {B} _{2}\mathbf {B} _{3}}}\\\end{array}}}
となり、端点とその隣の制御点で端点の接線が定まることがわかる[ 20] 。
P
(
t
)
=
[
t
3
t
2
t
1
]
[
−
1
3
−
3
1
3
−
6
3
0
−
3
3
0
0
1
0
0
0
]
[
B
0
B
1
B
2
B
3
]
{\displaystyle \mathbf {P} (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 {B} _{0}\\\mathbf {B} _{1}\\\mathbf {B} _{2}\\\mathbf {B} _{3}\end{bmatrix}}}
a
0
=
−
B
0
x
+
3
B
1
x
−
3
B
2
x
+
B
3
x
a
1
=
3
B
0
x
−
6
B
1
x
+
3
B
2
x
a
2
=
−
3
B
0
x
+
3
B
1
x
a
3
=
B
0
x
b
0
=
−
B
0
y
+
3
B
1
y
−
3
B
2
y
+
B
3
y
b
1
=
3
B
0
y
−
6
B
1
y
+
3
B
2
y
b
2
=
−
3
B
0
y
+
3
B
1
y
b
3
=
B
0
y
x
=
a
0
t
3
+
a
1
t
2
+
a
2
t
+
a
3
y
=
b
0
t
3
+
b
1
t
2
+
b
2
t
+
b
3
{\displaystyle {\begin{array}{l}a_{0}=-{B_{0}}_{x}+3{B_{1}}_{x}-3{B_{2}}_{x}+{B_{3}}_{x}\\a_{1}=3{B_{0}}_{x}-6{B_{1}}_{x}+3{B_{2}}_{x}\\a_{2}=-3{B_{0}}_{x}+3{B_{1}}_{x}\\a_{3}={B_{0}}_{x}\\b_{0}=-{B_{0}}_{y}+3{B_{1}}_{y}-3{B_{2}}_{y}+{B_{3}}_{y}\\b_{1}=3{B_{0}}_{y}-6{B_{1}}_{y}+3{B_{2}}_{y}\\b_{2}=-3{B_{0}}_{y}+3{B_{1}}_{y}\\b_{3}={B_{0}}_{y}\\x=a_{0}t^{3}+a_{1}t^{2}+a_{2}t+a_{3}\\y=b_{0}t^{3}+b_{1}t^{2}+b_{2}t+b_{3}\end{array}}}
とすると、
F
(
x
,
y
)
=
a
3
3
b
0
3
−
a
2
a
3
2
b
0
2
b
1
+
a
1
a
3
2
b
0
b
1
2
−
a
0
a
3
2
b
1
3
+
a
2
2
a
3
b
0
2
b
2
−
2
a
1
a
3
2
b
0
2
b
2
−
a
1
a
2
a
3
b
0
b
1
b
2
+
3
a
0
a
3
2
b
0
b
1
b
2
+
a
0
a
2
a
3
b
1
2
b
2
+
a
1
2
a
3
b
0
b
2
2
−
2
a
0
a
2
a
3
b
0
b
2
2
−
a
0
a
1
a
3
b
1
b
2
2
+
a
0
2
a
3
b
2
3
−
a
2
3
b
0
2
b
3
+
3
a
1
a
2
a
3
b
0
2
b
3
−
3
a
0
a
3
2
b
0
2
b
3
+
a
1
a
2
2
b
0
b
1
b
3
−
2
a
1
2
a
3
b
0
b
1
b
3
−
a
0
a
2
a
3
b
0
b
1
b
3
−
a
0
a
2
2
b
1
2
b
3
+
2
a
0
a
1
a
3
b
1
2
b
3
−
a
1
2
a
2
b
0
b
2
b
3
+
2
a
0
a
2
2
b
0
b
2
b
3
+
a
0
a
1
a
3
b
0
b
2
b
3
+
a
0
a
1
a
2
b
1
b
2
b
3
−
3
a
0
2
a
3
b
1
b
2
b
3
−
a
0
2
a
2
b
2
2
b
3
+
a
1
3
b
0
b
3
2
−
3
a
0
a
1
a
2
b
0
b
3
2
+
3
a
0
2
a
3
b
0
b
3
2
−
a
0
a
1
2
b
1
b
3
2
+
2
a
0
2
a
2
b
1
b
3
2
+
a
0
2
a
1
b
2
b
3
2
−
a
0
3
b
3
3
+
(
−
3
a
3
2
b
0
3
+
2
a
2
a
3
b
0
2
b
1
−
2
a
1
a
3
b
0
b
1
2
+
2
a
0
a
3
b
1
3
−
a
2
2
b
0
2
b
2
+
4
a
1
a
3
b
0
2
b
2
+
a
1
a
2
b
0
b
1
b
2
−
6
a
0
a
3
b
0
b
1
b
2
−
a
0
a
2
b
1
2
b
2
−
a
1
2
b
0
b
2
2
+
2
a
0
a
2
b
0
b
2
2
+
a
0
a
1
b
1
b
2
2
−
a
0
2
b
2
3
−
3
a
1
a
2
b
0
2
b
3
+
6
a
0
a
3
b
0
2
b
3
+
2
a
1
2
b
0
b
1
b
3
+
a
0
a
2
b
0
b
1
b
3
−
2
a
0
a
1
b
1
2
b
3
−
a
0
a
1
b
0
b
2
b
3
+
3
a
0
2
b
1
b
2
b
3
−
3
a
0
2
b
0
b
3
2
)
x
+
(
a
2
3
b
0
2
−
3
a
1
a
2
a
3
b
0
2
+
3
a
0
a
3
2
b
0
2
−
a
1
a
2
2
b
0
b
1
+
2
a
1
2
a
3
b
0
b
1
+
a
0
a
2
a
3
b
0
b
1
+
a
0
a
2
2
b
1
2
−
2
a
0
a
1
a
3
b
1
2
+
a
1
2
a
2
b
0
b
2
−
2
a
0
a
2
2
b
0
b
2
−
a
0
a
1
a
3
b
0
b
2
−
a
0
a
1
a
2
b
1
b
2
+
3
a
0
2
a
3
b
1
b
2
+
a
0
2
a
2
b
2
2
−
2
a
1
3
b
0
b
3
+
6
a
0
a
1
a
2
b
0
b
3
−
6
a
0
2
a
3
b
0
b
3
+
2
a
0
a
1
2
b
1
b
3
−
4
a
0
2
a
2
b
1
b
3
−
2
a
0
2
a
1
b
2
b
3
+
3
a
0
3
b
3
2
)
y
+
(
3
a
3
b
0
3
−
a
2
b
0
2
b
1
+
a
1
b
0
b
1
2
−
a
0
b
1
3
−
2
a
1
b
0
2
b
2
+
3
a
0
b
0
b
1
b
2
−
3
a
0
b
0
2
b
3
)
x
2
+
(
3
a
1
a
2
b
0
2
−
6
a
0
a
3
b
0
2
−
2
a
1
2
b
0
b
1
−
a
0
a
2
b
0
b
1
+
2
a
0
a
1
b
1
2
+
a
0
a
1
b
0
b
2
−
3
a
0
2
b
1
b
2
+
6
a
0
2
b
0
b
3
)
x
y
+
(
a
1
3
b
0
−
3
a
0
a
1
a
2
b
0
+
3
a
0
2
a
3
b
0
−
a
0
a
1
2
b
1
+
2
a
0
2
a
2
b
1
+
a
0
2
a
1
b
2
−
3
a
0
3
b
3
)
y
2
−
b
0
3
x
3
+
3
a
0
b
0
2
x
2
y
−
3
a
0
2
b
0
x
y
2
+
a
0
3
y
3
=
0
{\displaystyle {\begin{array}{l}F(x,y)=a_{3}^{3}b_{0}^{3}-a_{2}a_{3}^{2}b_{0}^{2}b_{1}+a_{1}a_{3}^{2}b_{0}b_{1}^{2}-a_{0}a_{3}^{2}b_{1}^{3}+a_{2}^{2}a_{3}b_{0}^{2}b_{2}-2a_{1}a_{3}^{2}b_{0}^{2}b_{2}-a_{1}a_{2}a_{3}b_{0}b_{1}b_{2}+3a_{0}a_{3}^{2}b_{0}b_{1}b_{2}\\\qquad +a_{0}a_{2}a_{3}b_{1}^{2}b_{2}+a_{1}^{2}a_{3}b_{0}b_{2}^{2}-2a_{0}a_{2}a_{3}b_{0}b_{2}^{2}-a_{0}a_{1}a_{3}b_{1}b_{2}^{2}+a_{0}^{2}a_{3}b_{2}^{3}-a_{2}^{3}b_{0}^{2}b_{3}+3a_{1}a_{2}a_{3}b_{0}^{2}b_{3}\\\qquad -3a_{0}a_{3}^{2}b_{0}^{2}b_{3}+a_{1}a_{2}^{2}b_{0}b_{1}b_{3}-2a_{1}^{2}a_{3}b_{0}b_{1}b_{3}-a_{0}a_{2}a_{3}b_{0}b_{1}b_{3}-a_{0}a_{2}^{2}b_{1}^{2}b_{3}+2a_{0}a_{1}a_{3}b_{1}^{2}b_{3}\\\qquad -a_{1}^{2}a_{2}b_{0}b_{2}b_{3}+2a_{0}a_{2}^{2}b_{0}b_{2}b_{3}+a_{0}a_{1}a_{3}b_{0}b_{2}b_{3}+a_{0}a_{1}a_{2}b_{1}b_{2}b_{3}-3a_{0}^{2}a_{3}b_{1}b_{2}b_{3}-a_{0}^{2}a_{2}b_{2}^{2}b_{3}\\\qquad +a_{1}^{3}b_{0}b_{3}^{2}-3a_{0}a_{1}a_{2}b_{0}b_{3}^{2}+3a_{0}^{2}a_{3}b_{0}b_{3}^{2}-a_{0}a_{1}^{2}b_{1}b_{3}^{2}+2a_{0}^{2}a_{2}b_{1}b_{3}^{2}+a_{0}^{2}a_{1}b_{2}b_{3}^{2}-a_{0}^{3}b_{3}^{3}\\\quad +(-3a_{3}^{2}b_{0}^{3}+2a_{2}a_{3}b_{0}^{2}b_{1}-2a_{1}a_{3}b_{0}b_{1}^{2}+2a_{0}a_{3}b_{1}^{3}-a_{2}^{2}b_{0}^{2}b_{2}+4a_{1}a_{3}b_{0}^{2}b_{2}+a_{1}a_{2}b_{0}b_{1}b_{2}-6a_{0}a_{3}b_{0}b_{1}b_{2}\\\qquad -a_{0}a_{2}b_{1}^{2}b_{2}-a_{1}^{2}b_{0}b_{2}^{2}+2a_{0}a_{2}b_{0}b_{2}^{2}+a_{0}a_{1}b_{1}b_{2}^{2}-a_{0}^{2}b_{2}^{3}-3a_{1}a_{2}b_{0}^{2}b_{3}+6a_{0}a_{3}b_{0}^{2}b_{3}+2a_{1}^{2}b_{0}b_{1}b_{3}\\\qquad +a_{0}a_{2}b_{0}b_{1}b_{3}-2a_{0}a_{1}b_{1}^{2}b_{3}-a_{0}a_{1}b_{0}b_{2}b_{3}+3a_{0}^{2}b_{1}b_{2}b_{3}-3a_{0}^{2}b_{0}b_{3}^{2})x\\\quad +(a_{2}^{3}b_{0}^{2}-3a_{1}a_{2}a_{3}b_{0}^{2}+3a_{0}a_{3}^{2}b_{0}^{2}-a_{1}a_{2}^{2}b_{0}b_{1}+2a_{1}^{2}a_{3}b_{0}b_{1}+a_{0}a_{2}a_{3}b_{0}b_{1}+a_{0}a_{2}^{2}b_{1}^{2}-2a_{0}a_{1}a_{3}b_{1}^{2}\\\qquad +a_{1}^{2}a_{2}b_{0}b_{2}-2a_{0}a_{2}^{2}b_{0}b_{2}-a_{0}a_{1}a_{3}b_{0}b_{2}-a_{0}a_{1}a_{2}b_{1}b_{2}+3a_{0}^{2}a_{3}b_{1}b_{2}+a_{0}^{2}a_{2}b_{2}^{2}-2a_{1}^{3}b_{0}b_{3}\\\qquad +6a_{0}a_{1}a_{2}b_{0}b_{3}-6a_{0}^{2}a_{3}b_{0}b_{3}+2a_{0}a_{1}^{2}b_{1}b_{3}-4a_{0}^{2}a_{2}b_{1}b_{3}-2a_{0}^{2}a_{1}b_{2}b_{3}+3a_{0}^{3}b_{3}^{2})y\\\quad +(3a_{3}b_{0}^{3}-a_{2}b_{0}^{2}b_{1}+a_{1}b_{0}b_{1}^{2}-a_{0}b_{1}^{3}-2a_{1}b_{0}^{2}b_{2}+3a_{0}b_{0}b_{1}b_{2}-3a_{0}b_{0}^{2}b_{3})x^{2}\\\quad +(3a_{1}a_{2}b_{0}^{2}-6a_{0}a_{3}b_{0}^{2}-2a_{1}^{2}b_{0}b_{1}-a_{0}a_{2}b_{0}b_{1}+2a_{0}a_{1}b_{1}^{2}+a_{0}a_{1}b_{0}b_{2}-3a_{0}^{2}b_{1}b_{2}+6a_{0}^{2}b_{0}b_{3})xy\\\quad +(a_{1}^{3}b_{0}-3a_{0}a_{1}a_{2}b_{0}+3a_{0}^{2}a_{3}b_{0}-a_{0}a_{1}^{2}b_{1}+2a_{0}^{2}a_{2}b_{1}+a_{0}^{2}a_{1}b_{2}-3a_{0}^{3}b_{3})y^{2}\\\quad -b_{0}^{3}x^{3}+3a_{0}b_{0}^{2}x^{2}y-3a_{0}^{2}b_{0}xy^{2}+a_{0}^{3}y^{3}\qquad =0\end{array}}}
となる。
3次ベジェ曲線は、変曲点 、ループ(自己交差)、カスプ(尖点) 、のいずれかを含む場合がある。以下類型に分類される
[ 22] [ 23]
。
3次ベジェ曲線の類型[ 24]
類型のどれにあてはまるかを判別するためには、まず、各制御点をアフィン写像して、
B
0
{\displaystyle {\mathbf {B} }_{0}}
が
(
0
,
0
)
{\displaystyle (0,0)}
、
B
1
{\displaystyle {\mathbf {B} }_{1}}
が
(
0
,
1
)
{\displaystyle (0,1)}
、
B
2
{\displaystyle {\mathbf {B} }_{2}}
が
(
1
,
1
)
{\displaystyle (1,1)}
である正準形式 (英語版 ) に変換する。
各類型を正準形式に変換[ 25]
次に、正準形式に変換した
B
3
{\displaystyle {\mathbf {B} }_{3}}
を以下の判別図にプロットして判定する。
正準形式の判別図[ 26]
曲線上の任意の点の座標を
x
=
f
(
t
)
,
y
=
g
(
t
)
{\displaystyle x=f(t),\ y=g(t)}
とすると、変曲点は、曲率の定義より
x
′
y
″
−
y
′
x
″
=
0
{\displaystyle x'y''-y'x''=0}
となる
t
1
,
t
2
{\displaystyle t_{1},\ t_{2}}
、ループの交点は、
f
(
t
1
)
=
f
(
t
2
)
{\displaystyle f(t_{1})=f(t_{2})}
かつ
g
(
t
1
)
=
g
(
t
2
)
{\displaystyle g(t_{1})=g(t_{2})}
となる
t
1
,
t
2
{\displaystyle t_{1},\ t_{2}}
である。ループの交点が重なる(
t
1
=
t
2
{\displaystyle t_{1}=t_{2}}
)場合はカスプになる。
正準形式を用いない場合、各類型は以下により判別し特異点を求めることができる[ 27] [ 28] [ 29] 。
D
<
0
{\displaystyle D<0}
変曲点
v
≠
0
{\displaystyle v\neq 0}
t
=
−
w
±
−
D
3
2
v
{\displaystyle t={\frac {-w\pm {\sqrt {-{\frac {D}{3}}}}}{2v}}}
v
=
0
,
w
≠
0
{\displaystyle v=0,\ w\neq 0}
t
=
−
u
3
w
{\displaystyle t=-{\frac {u}{3w}}}
D
=
0
,
v
≠
0
{\displaystyle D=0,\ v\neq 0}
カスプ
t
=
−
w
2
v
{\displaystyle t=-{\frac {w}{2v}}}
D
>
0
,
v
≠
0
{\displaystyle D>0,\ v\neq 0}
ループ
t
=
−
w
±
D
2
v
{\displaystyle t={\frac {-w\pm {\sqrt {D}}}{2v}}}
ただし、
a
0
=
−
B
0
x
+
3
B
1
x
−
3
B
2
x
+
B
3
x
,
a
1
=
3
B
0
x
−
6
B
1
x
+
3
B
2
x
,
a
2
=
−
3
B
0
x
+
3
B
1
x
,
a
3
=
B
0
x
b
0
=
−
B
0
y
+
3
B
1
y
−
3
B
2
y
+
B
3
y
,
b
1
=
3
B
0
y
−
6
B
1
y
+
3
B
2
y
,
b
2
=
−
3
B
0
y
+
3
B
1
y
,
b
3
=
B
0
y
x
=
f
(
t
)
=
a
0
t
3
+
a
1
t
2
+
a
2
t
+
a
3
,
y
=
g
(
t
)
=
b
0
t
3
+
b
1
t
2
+
b
2
t
+
b
3
u
=
a
1
b
2
−
a
2
b
1
,
v
=
a
0
b
1
−
a
1
b
0
,
w
=
a
0
b
2
−
a
2
b
0
D
=
4
u
v
−
3
w
2
{\displaystyle {\begin{array}{l}a_{0}=-{B_{0}}_{x}+3{B_{1}}_{x}-3{B_{2}}_{x}+{B_{3}}_{x},\ a_{1}=3{B_{0}}_{x}-6{B_{1}}_{x}+3{B_{2}}_{x},\ a_{2}=-3{B_{0}}_{x}+3{B_{1}}_{x},\ a_{3}={B_{0}}_{x}\\b_{0}=-{B_{0}}_{y}+3{B_{1}}_{y}-3{B_{2}}_{y}+{B_{3}}_{y},\ b_{1}=3{B_{0}}_{y}-6{B_{1}}_{y}+3{B_{2}}_{y},\ b_{2}=-3{B_{0}}_{y}+3{B_{1}}_{y},\ b_{3}={B_{0}}_{y}\\x=f(t)=a_{0}t^{3}+a_{1}t^{2}+a_{2}t+a_{3},\ y=g(t)=b_{0}t^{3}+b_{1}t^{2}+b_{2}t+b_{3}\\u=a_{1}b_{2}-a_{2}b_{1},\ v=a_{0}b_{1}-a_{1}b_{0},\ w=a_{0}b_{2}-a_{2}b_{0}\\D=4uv-3w^{2}\end{array}}}
とする。
端点 P0 , P3 および制御点 P1 , P2 からなる3次ベジェ曲線
前節の数式を適宜変形するなどして、コンピュータプログラムに実装すれば描画はできるわけだが、以下では3次のベジェ曲線(4個の制御点で示される曲線)を例として、手作業を念頭に置いた作図法を示す。この手順を基にした描画プログラムにも有用性があり、また人によってはベジェ曲線の性質を直観的に把握するにも有効かもしれない。
右図の P0 , P1 , P2 , P3 が与えられた制御点である。今、ベジェ曲線の P0 から t (0 < t < 1) の比率の位置の点の座標を求めるためには、次のように計算すればよい。
まず、制御点を順に結んで得られる3つの線分 P0 P1 , P1 P2 , P2 P3 (水色の折れ線)をそれぞれ t : 1 − t の比率で分割する点、P4 , P5 , P6 を求める。
次に、これらの点を順に結んで得られる2つの線分 P4 P5 , P5 P6 (橙色の折れ線)を再びそれぞれ t : 1 − t の比率で分割する点 P7 , P8 を求める。
最後に、この2点を結ぶ線分 P7 P8 (緑色の線分)をさらに t : 1 − t の比率で分割する点 P9 を求めると、この点がベジェ曲線上の点となる。
この作業を 0 < t < 1 の範囲で繰り返し行うことにより、P0 , P1 , P2 , P3 を制御点とする3次ベジェ曲線(赤色の曲線)が得られる。
複合ベジェ曲線の作図ツール画面例 方向ハンドルは、アンカーポイントに設定された連続性に応じて他のハンドルと連動する
複合ベジェ曲線 (英 : composite Bézier curve )はベジェ曲線を1つのセグメントとして複数セグメントを直列に接続した曲線である[ 注 1] 。ベジェスプライン (英 : Bézier spline )[ 34] 、ポリベジェ曲線 (英 : polybezier )とも。
N次ベジェ曲線は次数を変えずに延長できない。なぜなら延長のために制御点を追加することで次数も増加するからである。またN次ベジェ曲線は既存区間に影響を与えずに延長できない。なぜなら全制御点の反映 という特性により新しい制御点座標が既存の区間にも反映されるからである。
これに対する方策にはスプライン曲線 をはじめとした区分多項式がある。区分多項式ではある区間を1つの多項式で表現し、その続きの区間を別の多項式で表現し、曲線全体を複数の多項式で構成する。新しい区間の多項式は既存区間と独立しているため、上記の次数増や既存区間影響の問題を回避できる[ 34] 。これを採用し、ベジェ曲線で各区分を表現した区分多項式が複合ベジェ曲線である。
原語(フランス語 )における Bé zier の発音はベズィエに近く、「ベジェ曲線」より「ベジエ曲線」の方がこれに忠実と言えるが、いずれの呼称も用いられている。
ベジェ曲面(曲面パッチなどとも)と呼ばれるような、3次元空間内の曲面への拡張にはいくつか手法がある。たとえば、目的の曲面においてパッチの端点となる3点とその3点における接平面を指定するという方法や、4点を指定し2方向のクロスハッチングのようにして面を構成するという方法がある。
↑ 「複合ベジェ曲線」は仮訳。アカデミックな邦訳がまだ存在していない可能性が高い。
↑ 3次ベジェ曲線 は始点と第1制御点の距離によって始点付近の曲率が制御できるため補正用途に向く。
↑ "N 次ベジェ曲線 ...
P
(
t
)
=
∑
i
=
0
N
n
C
i
t
i
(
1
−
t
)
n
−
i
P
i
{\displaystyle P(t)=\sum _{i=0}^{N}{}_{n}C_{i}t^{i}(1-t)^{n-i}P_{i}}
さらなる一般化
P
(
t
)
=
∑
i
=
0
N
B
i
n
P
i
{\displaystyle P(t)=\sum _{i=0}^{N}B_{i}^{n}P_{i}}
" 金森 2017 より引用。
↑ "ベジェ曲線
x
(
t
)
=
b
0
n
(
t
)
{\displaystyle x(t)=b_{0}^{n}(t)}
は次のように表示される:
x
(
t
)
=
b
0
n
(
t
)
=
∑
j
=
0
n
B
j
n
(
t
)
b
j
{\displaystyle x(t)=b_{0}^{n}(t)=\sum _{j=0}^{n}B_{j}^{n}(t)b_{j}}
これをベジェ曲線のベルンシュタイン表現という。" 浦川 2004 より引用。
↑ "ベジエ曲線のベルンシュタイン多項式による表現
b
0
n
(
t
)
=
∑
j
=
0
n
b
j
B
j
n
(
t
)
(
6
)
{\displaystyle b_{0}^{n}(t)=\sum _{j=0}^{n}b_{j}B_{j}^{n}(t)\quad (6)}
を得る.これを,ベジエ曲線のベルンシュタイン表現とよぶ." 坂根 2005b , p. 15 より引用。
↑ "ド・カステリョのアルゴリズムから得られる曲線
b
0
n
(
t
)
{\displaystyle b_{0}^{n}(t)}
を ... ベジエ曲線と呼ぶ." 坂根 2005a , p. 9 より引用。
↑
Sederberg, T. W.; Anderson, D. C.; Goldman, R.N. (Oct. 1984). “Implicit representation of parametric curves and surfaces”. Computer Vision, Graphics, and Image Processing 28 (1): 72-84.
1 2 3 "
P
(
t
)
=
∑
i
=
0
n
B
i
n
P
i
B
i
n
=
n
C
i
t
i
(
1
−
t
)
n
−
i
{\displaystyle P(t)=\sum _{i=0}^{n}B_{i}^{n}P_{i}\qquad B_{i}^{n}={}_{n}\!C_{i}t^{i}(1-t)^{n-i}}
ある比率で各制御点の座標を混ぜ合わせる ... 混合比(和は 1 になる) 混合比を関数で表したものを「基底関数」とよぶ" 金森 2017 より引用。
↑ "ベジェ曲線上の点P(t)は、制御点Piの加重平均として定義される。" p.236 より引用。谷口. (2000). 制御点方式による曲線形状の生成 . 長野大学紀要, 22巻3号, pp.234-242.
↑ C.-K. Shene. “Unit 5: Bézier Curves - Derivatives of a Bézier Curve ” (英語). CS3621 Introduction to Computing with Geometry Notes . Michigan Technological University. 2025年7月16日閲覧。
1 2 Farin, pp. 29, 36.
↑ Farin, p. 36.
↑ Farin, pp. 28-29, 36.
↑ SU, BUCHIN; LIU, DINGYUAN (March 1983). “AN AFFINE INVARIANT THEORY AND ITS APPLICATION IN COMPUTATIONAL GEOMETRY” . Science in China Series A-Mathematics, Physics, Astronomy & Technological Science 26 (3): 259-263. https://www.sciengine.com/Math%20A1/doi/10.1360/ya1983-26-3-259 .
↑ Farin, pp. 36-37.
↑ Farin, p. 37.
↑ "2次ベジェ曲線
P
(
t
)
=
(
1
−
t
)
2
P
0
+
2
t
(
1
−
t
)
P
1
+
t
2
P
2
{\displaystyle P(t)=(1-t)^{2}P_{0}+2t(1-t)P_{1}+t^{2}P_{2}}
" 金森 2017 より引用。
↑ 高校数学の美しい物語 - ガウスグリーンの定理の入試への応用
↑ Subdividing a Bézier Curve - CS3621 Introduction to Computing with Geometry Notes
↑ Bézier Splines - FontForge Technical References
↑ "3 次ベジェ曲線は 4 個の制御点を持つ曲線" p.106 より引用。金 澤. (2015). パラメトリック曲線を用いたノンパラメトリック形状最適化法に関する研究 . 三重大学学術機関リポジトリ.
↑ "3 次ベジェ曲線の性質 ... 第 1, 2 制御点で終点での接線が決まる ... 第 3,4 制御点で終点での接線が決まる" 金森 2017 より引用。
↑ Farin, p. 42.
↑ Stone, Maureen C.; DeRose, Tony D. (July 1989). “A Geometric Characterization of Parametric Cubic Curves” . ACM Transactions on Graphics 8 (3): 147-163. https://graphics.pixar.com/people/derose/publications/CubicClassification/paper.pdf .
↑ Pomax. “The canonical form (for cubic curves) ” (英語). A Primer on Bézier Curves . 2025年7月29日閲覧。
↑ Stone, DeRose (1989), p.148, Fig.1 に基づき作成
↑ Stone, DeRose (1989), p.152, Fig.4 に基づき作成
↑ Stone, DeRose (1989), p.156, Fig.8 に基づき作成
↑ 白山風露. “自己交差する3次ベジェ曲線の交差点を求める ”. Zenn . 2025年7月29日閲覧。
↑ “3次ベジェ曲線の特異点の解析的導出 ”. Qiita . 2026年1月16日閲覧。
↑ “2D cubic Bezier curve. Point of self-intersection ” (英語). Stack Exchange - Mathematics . 2025年7月29日閲覧。
↑ Sederberg, T. W.; Nishita, T. (Nov. 1990). “Curve intersection using Bézier clipping” . Computer-Aided Design 22 (9): 538-549. http://nishitalab.org/user/nis/cdrom/cad/CAGD90Curve.pdf .
↑ Sederberg, Thomas W. (July 25, 2017). Computer Aided Geometric Design . pp. 191-208. https://scholarsarchive.byu.edu/facpub/1/
↑ Reshetov, Alexander (July 2017). “Exploiting Budan-Fourier and Vincent’s Theorems for Ray Tracing 3D Bézier Curves” . Proceedings of HPG ’17, Los Angeles, CA, USA, July 28-30, 2017 . doi :10.1145/3105762.3105783 . https://research.nvidia.com/sites/default/files/pubs/2017-07_Exploiting-Budan-Fourier-and//HPG2017-Budan-Fourier.pdf .
↑ “Implicitization法によるベジェ曲線の交点検出 ~ 代数方程式の実用的解法の検討と実装 ~ ”. Qiita . 2025年12月19日閲覧。
1 2 "ベジェスプライン曲線を用いる利点 ... 制御点の影響の局所性により制御点を編集した際の影響を曲線の一部分に限定できる" p.4 より引用。中野. (2002). 利用者の動作と連動する仮想ファッション . インタラクション2002論文集, pp.231-238.
↑ Line and Curve Functions - Windows applications | Microsoft Docs
↑ ID2D1GeometrySink::AddBezier(const D2D1_BEZIER_SEGMENT) (d2d1.h) | Microsoft Docs
↑ D2D1_BEZIER_SEGMENT (d2d1.h) | Microsoft Docs
↑ GraphicsPath.AddBezier Method (System.Drawing.Drawing2D) | Microsoft Docs
↑ BezierSegment Class (System.Windows.Media) | Microsoft Docs
↑ Geometric Primitives (The Java™ Tutorials > 2D Graphics > Overview of the Java 2D API Concepts)
↑ skia/SkPath.h at master · google/skia
↑ Path | Android Developers
↑ 鳥谷浩志; 千代倉弘明 (1991). 3次元CADの基礎と応用 . 共立出版. ISBN 9784320025394
ウィキメディア・コモンズには、
ベジェ曲線 に関連するカテゴリがあります。