有理贝塞尔曲线
说明
文稿来自计算几何导论 https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES 的翻译。
有理贝塞尔曲线
有理贝塞尔曲线是NURBS曲线的特例。有理贝塞尔曲线由以下确定:
n
+
1
n+1
n+1个控制点
P
0
,
P
1
,
.
.
.
,
P
n
P_0,P_1,...,P_n
P0,P1,...,Pn,与控制点一一对应的权值
w
i
w_i
wi,结点为0(重数为n+1)与1(重数为n+1)。
C
(
u
)
=
∑
i
=
0
n
R
i
,
n
(
u
)
P
i
\mathbf{C}(u)=\sum_{i=0}^{n} R_{i, n}(u) \mathbf{P}_{i}
C(u)=i=0∑nRi,n(u)Pi
其中基函数:
R
i
,
n
(
u
)
=
B
n
,
i
(
u
)
w
i
∑
j
=
0
n
B
n
,
j
(
u
)
w
j
R_{i, n}(u)=\frac{B_{n, i}(u) w_{i}}{\sum_{j=0}^{n} B_{n, j}(u) w_{j}}
Ri,n(u)=∑j=0nBn,j(u)wjBn,i(u)wi
圆锥曲线
由以前的讨论可以知道,贝塞尔曲线与B样条曲线只能表达抛物线等多项式曲线。有理曲线的引入,使得曲线也能够表达圆、椭圆、双曲线等。
(该部分的讨论 似乎建立在度为2的有理贝塞尔曲线就是圆锥曲线的基础上的)
五个条件可以唯一地确定一条圆锥曲线
我们知道,如下隐式曲线可以表达圆锥曲线,该隐式曲线由三个点
P
0
,
P
1
,
P
2
P_0,P_1,P_2
P0,P1,P2确定(曲线经过
P
0
,
P
2
P_0,P_2
P0,P2且与
P
0
P
1
,
P
2
P
1
P_0P_1,P_2P_1
P0P1,P2P1相切。
p
(
x
,
y
)
=
a
x
2
+
2
b
x
y
+
c
y
2
+
2
d
x
+
2
e
y
+
f
=
0
p(x, y)=a x^{2}+2 b x y+c y^{2}+2 d x+2 e y+f=0
p(x,y)=ax2+2bxy+cy2+2dx+2ey+f=0
一个自然的想法是将该点选取再P1到P0P2中点的线段上,在该线段上移动该点能够生成不同的圆锥曲线。
由基函数出发
我们假设三个控制点P0,P1,P2的权值分别为1,w,1。2度贝塞尔曲线的基函数为:
B
2
,
0
(
u
)
=
(
1
−
u
)
2
B
2
,
1
(
u
)
=
2
(
1
−
u
)
u
B
2
,
2
(
u
)
=
u
2
B_{2,0}(u)=(1-u)^{2}\\B_{2,1}(u)=2(1-u)u\\B_{2,2}(u)=u^{2}
B2,0(u)=(1−u)2B2,1(u)=2(1−u)uB2,2(u)=u2
即
∣
M
X
∣
/
∣
M
P
1
∣
=
w
/
(
1
+
w
)
|\mathbf{M X}|/|\mathbf{M P}_{1}|=w /(1+w)
∣MX∣/∣MP1∣=w/(1+w)
如果w=1,有理贝塞尔曲线退化为贝塞尔曲线,曲线变成为抛物线。此时,
X
X
X位于
M
P
1
MP_1
MP1的中点。
那么如何判断有理贝塞尔曲线是椭圆还是双曲线。
结论
由三个非共线控制点 P 0 P_0 P0, P 1 P_1 P1和 P 2 P_2 P2以及权重1, w w w和1定义的有理贝塞尔曲线是双曲线,抛物线或椭圆,如果w大于,等于或小于1。
圆弧与圆
最后,我们需要分别用有理贝塞尔曲线和NURBS曲线表示圆弧与圆。
圆弧
因为圆是特殊的椭圆,那么圆弧也是用2度有理贝塞尔曲线表示,且参数
w
<
1
w<1
w<1。
给定三个控制点
P
0
P_0
P0,
P
1
P_1
P1和
P
2
P_2
P2,
P
0
P
1
=
P
1
P
2
P_0P_1 = P_1P_2
P0P1=P1P2,且三个控制点对应的权重分别为
1
,
s
i
n
(
α
)
,
1
1,sin(\alpha),1
1,sin(α),1,其中
α
\alpha
α是控制点
P
1
P_1
P1的半角,则有理贝塞尔曲线为一个圆弧。
两个示例
四分之一圆:
P
1
P_1
P1处的角度为90度,
α
\alpha
α为45度,
w
=
s
i
n
(
45
°
)
w=sin(45°)
w=sin(45°)。
三分之一圆:控制三角形为等边三角形,即
α
\alpha
α为
60
°
60°
60°,
w
=
0.5
w=0.5
w=0.5。
完整圆
采用三个三分之一圆拼接成完整圆:
明显,控制点共7个,
n
=
6
n=6
n=6;度
p
=
2
p=2
p=2。
那么
m
=
n
+
p
+
1
=
9
m=n+p+1=9
m=n+p+1=9,共10个结点,首尾结点为了保证钳制各需要3个结点,即
u
0
=
u
1
=
u
2
=
0
u0 = u1 = u2 = 0
u0=u1=u2=0,
u
7
=
u
8
=
u
9
=
1
u7 = u8 = u9 = 1
u7=u8=u9=1。同时,为了保证曲线经过
P
2
P2
P2、
P
4
P4
P4,两个控制点处的结点重数应为p,即
u
3
=
u
4
=
1
/
3
u3=u4=1/3
u3=u4=1/3,
u
5
=
u
6
=
2
/
3
u5=u6=2/3
u5=u6=2/3。