
对于两条线段,三个点的情况




对于四条线段,三个点的情况,递归处理即可

e.g. 三个点的贝塞尔曲线的例子

根据 b 0 1 b_0^1 b01 和 b 1 1 b_1^1 b11 得到 b 0 2 b_0^2 b02,将其展开容易得到上式,容易发现是系数是 ( 1 − t + t ) 2 (1-t +t)^2 (1−t+t)2 的形式,所以我们容易推理出贝塞尔曲线的一般代数表示
对于有
n
+
1
n+1
n+1 个点的贝塞尔曲线,在任意时间
t
t
t,它都是给定的控制点的线性组合
b
n
(
t
)
=
b
0
n
(
t
)
=
∑
j
=
0
n
b
j
B
j
n
(
t
)
\mathbf{b}^n(t)=\mathbf{b}_0^n(t)=\sum_{j=0}^n \mathbf{b}_j B_j^n(t)
bn(t)=b0n(t)=j=0∑nbjBjn(t)
其中,
B
j
n
(
t
)
B_j^n(t)
Bjn(t) 是 Bernstein polynomial,描述为【就是描述
(
1
−
t
+
t
)
n
(1-t +t)^n
(1−t+t)n 的各项系数是多少】
B
i
n
(
t
)
=
(
n
i
)
t
i
(
1
−
t
)
n
−
i
B_i^n(t)=\left(
当控制点较多时,贝塞尔曲线的形状不好控制。在实际的情况中,使用多段贝塞尔曲线进行首尾相接得到新曲线(一般使用四个控制点的三次贝塞尔曲线),这种方法就叫做逐段的贝塞尔曲线

一个可控的曲线
Evaluating Surface Position For Parameters ( u , v ) (u,v) (u,v)


引入更多的三角形
让三角形的位置发生一些变化,让原来的物体变得更加光滑
对于新的顶点
下图中的白色顶点为生成的新的顶点且被两个原三角形共享,认为 A , B A,B A,B 两点是距离白色点较近的两个点, C , D C,D C,D 两点是距离白色点较远的两个点,实质是一种加权平均,使得新出现的白点可以达到平滑的效果
Loop Subdivision 算法将白色顶点的坐标调整为
3
8
(
A
+
B
)
+
1
8
(
C
+
D
)
\frac{3}{8}(A+B) + \frac{1}{8}(C+D)
83(A+B)+81(C+D)

对于旧的顶点(虚线表示拆出的新三角形,老的顶点是中间的白色点)
Loop Subdivision 算法使得调整后的新顶点,一部分相信老的顶点的平均值,一部分受新的顶点的影响
定义 n n n 为白色顶点的度,下图中 n = 6 n=6 n=6
定义 u u u 为与 n n n 有关系的一个数。当 n = 3 n=3 n=3 时, u = 3 16 u=\frac{3}{16} u=163,当 n ≠ 3 n\ne 3 n=3 时, u = 3 8 n u = \frac{3}{8n} u=8n3
Loop Subdivision 算法将白色顶点的坐标调整为 (可以这么理解,如果一个顶点连了很多三角形,说明这个顶点可以由别人来决定,如果一个顶点连接的三角形数目很少,说明这个顶点自身比较重要,要更多的相信自己的信息)
(
1
−
u
n
)
×
original_position
+
u
×
neighbor_position_sum
(1-un)\times \text{original\_position} + u\times\text{neighbor\_position\_sum}
(1−un)×original_position+u×neighbor_position_sum




在一次细分之后,所有的非四边形面都消失了,每一个非四边形面都转化成了一个奇异点,之后奇异点的数目不会在增加了

f
=
v
1
+
v
2
+
v
3
+
v
4
4
f=\frac{v_1+v_2+v_3+v_4}{4}
f=4v1+v2+v3+v4
在边中心的新的点,设其为
e
e
e

e
=
v
1
+
v
2
+
f
1
+
f
2
4
e=\frac{v_1+v_2+f_1+f_2}{4}
e=4v1+v2+f1+f2
老的点,设其为 v v v,定义 p p p 为老的点, m m m 为边的中点

v
=
f
1
+
f
2
+
f
3
+
f
4
+
2
(
m
1
+
m
2
+
m
3
+
m
4
)
+
4
p
16
v=\frac{f_1+f_2+f_3+f_4+2\left(m_1+m_2+m_3+m_4\right)+4 p}{16}
v=16f1+f2+f3+f4+2(m1+m2+m3+m4)+4p







