文章目录
Introduction
B
e
ˊ
zier Curve
\text{B\'ezier Curve}
Beˊzier Curve 实际上是有一个调和函数(Harmonic functions)根据控制点(Control Points)插值生成。
其参数方程如下:
(0)
Q
(
t
)
=
∑
i
=
0
n
P
i
B
i
,
n
(
t
)
,
t
∈
[
0
,
1
]
Q(t) = \sum_{i=0}^nP_{i}B_{i,n}(t) ,t\in[0,1] \tag{0}
Q(t)=i=0∑nPiBi,n(t),t∈[0,1](0)
上式为n次多项式,具有
n
+
1
n + 1
n+1。 其中,
P
(
i
=
0
,
1
…
n
)
P(i=0,1\dots n)
P(i=0,1…n)表示多边形的
n
+
1
n+1
n+1个顶点向量;
B
i
,
n
(
t
)
B_{i,n}(t)
Bi,n(t) 为伯恩斯坦(Berstein)基函数,其多项式表示为:
(1)
B
i
,
n
(
t
)
=
n
!
i
!
(
n
−
i
)
!
t
i
(
1
−
t
)
n
−
i
,
i
=
0
,
1
…
n
B_{i,n}(t)=\frac{n!}{i!(n-i)!}t^{i}(1-t)^{n-i}, i=0, 1\dots n\tag{1}
Bi,n(t)=i!(n−i)!n!ti(1−t)n−i,i=0,1…n(1)
Linear B e ˊ zier Curve \text{Linear B\'ezier Curve} Linear Beˊzier Curve
有两个控制点,表达式如下:
Q
(
t
)
=
∑
i
1
P
i
B
i
,
1
(
t
)
=
P
0
B
0
,
1
(
t
)
+
P
1
B
1
,
1
(
t
)
=
(
1
−
t
)
P
0
+
t
P
1
=
[
t
1
]
[
−
1
1
1
0
]
[
P
0
P
1
]
,
t
∈
[
0
,
1
]
\begin{aligned} Q(t) & = \sum_{i}^{1}P_{i}B_{i,1}(t) = P_{0}B_{0,1}(t) + P_{1}B_{1,1}(t) \\ & = (1-t)P_{0} + tP_{1} \\ & = \left[ \begin{matrix} t & 1 \end{matrix} \right] \left[ \begin{matrix} -1 & 1 \\ 1 & 0 \end{matrix} \right] \left[ \begin{matrix} P_{0} \\ P_{1} \end{matrix} \right] \end{aligned} ,t \in[0,1]
Q(t)=i∑1PiBi,1(t)=P0B0,1(t)+P1B1,1(t)=(1−t)P0+tP1=[t1][−1110][P0P1],t∈[0,1]
可以看出,这就是一条直线:
Quadratic B e ˊ zier Curve \text{Quadratic B\'ezier Curve} Quadratic Beˊzier Curve
有三个控制点:
Q
(
t
)
=
∑
i
=
0
2
P
0
B
0
,
2
(
t
)
+
P
1
B
1
,
2
(
t
)
+
P
2
B
2
,
2
(
t
)
=
(
1
−
t
)
2
P
0
+
2
t
(
1
−
t
)
P
1
+
t
2
P
2
=
(
P
2
−
2
P
1
+
P
0
)
t
2
+
2
(
P
1
−
P
0
)
t
+
P
0
=
[
t
2
t
1
]
[
1
−
2
1
−
2
2
0
1
0
0
]
[
P
0
P
1
P
2
]
,
t
∈
[
0
,
1
]
\begin{aligned} Q(t)& = \sum_{i=0}^{2}P_{0}B_{0,2}(t) + P_{1}B_{1,2}(t) + P_{2}B_{2,2}(t) \\ & = (1-t)^{2}P_{0} + 2t(1-t)P_{1} + t^{2}P_{2} \\ & = (P_{2} - 2P_{1} + P_{0})t^{2} + 2(P_{1} - P_{0})t + P_{0} \\ & = \left[ \begin{matrix} t^{2} & t & 1 \end{matrix} \right] \left[ \begin{matrix} 1 & -2 & 1 \\ -2 & 2 & 0 \\ 1 & 0 & 0 \end{matrix} \right] \left[ \begin{matrix} P_{0} \\ P_{1} \\ P_{2} \end{matrix} \right] & & &, t \in [0,1] \end{aligned}
Q(t)=i=0∑2P0B0,2(t)+P1B1,2(t)+P2B2,2(t)=(1−t)2P0+2t(1−t)P1+t2P2=(P2−2P1+P0)t2+2(P1−P0)t+P0=[t2t1]⎣⎡1−21−220100⎦⎤⎣⎡P0P1P2⎦⎤,t∈[0,1]
这是一条抛物线(parabola):
Properties
Symmetry 对称性
B
i
,
n
(
t
)
=
B
n
−
i
,
n
(
t
)
B_{i,n}(t) = B_{n - i,n}(t)
Bi,n(t)=Bn−i,n(t)
根据二项式定理易得
Geometric Invariant 旋转不变性
曲线的形状取决于控制点的位置,当旋转时,控制点之间相对位置不变,曲线不变。
由此可得:只需对控制点进行旋转,即可绘制旋转后的曲线:
Implementation with C++
L O A D I N G … \mathscr{LOADING}\dots LOADING…