首页 > 其他分享 >Bezier曲线曲面--拟合技术

Bezier曲线曲面--拟合技术

时间:2024-06-22 09:58:34浏览次数:23  
标签:Bezier 定义 -- 曲线 控制点 曲面 拟合 Bernstein

Bezier曲线曲面–拟合应用

1.Bezier曲线

1.1.Bezier曲线的定义

给定一组控制点 P_0, P_1, …, P_n,其中 n 是曲线的阶数,Bezier曲线的参数方程可以表示为:
B ( t ) = ∑ i = 0 n P i b i , n ( t ) , t ∈ [ 0 , 1 ] B(t) = \sum_{i=0}^{n} P_i b_{i,n}(t), \quad t \in [0, 1] B(t)=i=0∑n​Pi​bi,n​(t),t∈[0,1]

其中, b i , n ( t ) 是 B e r n s t e i n 基函数,定义为: 其中,b_{i,n}(t) 是Bernstein基函数,定义为: 其中,bi,n​(t)是Bernstein基函数,定义为:

b i , n ( t ) = C ( n , i ) t i ( 1 − t ) n − i = n ! i ! ( n − i ) ! t i ( 1 − t ) n − i b_{i,n}(t) = C(n, i) t^i (1-t)^{n-i} = \frac{n!}{i!(n-i)!} t^i (1-t)^{n-i} bi,n​(t)=C(n,i)ti(1−t)n−i=i!(n−i)!n!​ti(1−t)n−i

这里,C(n, i) 是组合数,表示从 n 个不同元素中选择 i 个的组合数。

常见的Bezier曲线

  • 二次Bezier曲线:由三个控制点定义,参数方程为:

B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 , t ∈ [ 0 , 1 ] B(t) = (1-t)^2 P_0 + 2t(1-t) P_1 + t^2 P_2, \quad t \in [0, 1] B(t)=(1−t)2P0​+2t(1−t)P1​+t2P2​,t∈[0,1]

  • 三次Bezier曲线:由四个控制点定义,是最常用的形式,参数方程为:

B ( t ) = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 , t ∈ [ 0 , 1 ] B(t) = (1-t)^3 P_0 + 3t(1-t)^2 P_1 + 3t^2(1-t) P_2 + t^3 P_3, \quad t \in [0, 1] B(t)=(1−t)3P0​+3t(1−t)2P1​+3t2(1−t)P2​+t3P3​,t∈[0,1]

1.2.Bernstein基函数性质

定义:给定一个参数( t ),其中( 0 <= t <= 1 ),以及一个正整数( n ),Bernstein基函数定义为:
B i , n ( t ) = ( n i ) t i ( 1 − t ) n − i for i = 0 , 1 , 2 , . . . , n B_{i,n}(t) = \binom{n}{i} t^i (1-t)^{n-i} \quad \text{for} \quad i = 0, 1, 2, ..., n Bi,n​(t)=(in​)ti(1−t)n−ifori=0,1,2,...,n
其中:
( n i ) 是组合数,表示从 n 个元素中选择 i 个的组合数。 \binom{n}{i}是组合数,表示从n个元素中选择i个的组合数。 (in​)是组合数,表示从n个元素中选择i个的组合数。
性质:

1.非负性:对于所有的( t )和( i ):
B i , n ( t ) ≥ 0 ; B_{i,n}(t) \geq 0; Bi,n​(t)≥0;
2.归一化:Bernstein基函数的和为1,即:
∑ i = 0 n B i , n ( t ) = 1 \sum_{i=0}^n B_{i,n}(t) = 1 i=0∑n​Bi,n​(t)=1
这一性质使得Bernstein基函数在多项式插值和曲线设计中非常有用,因为它们可以保证在参数空间中的归一化。3.端点性质:Bernstein基函数在端点( t = 0 )和( t = 1 )具有特殊的性质。具体来说:
B 0 , n ( 0 ) = 1 和 B n , n ( 1 ) = 1 ,所有其他 B i , n ( 0 ) 和 B i , n ( 1 ) 均为 0 。 B_{0,n}(0) = 1和B_{n,n}(1) = 1,所有其他B_{i,n}(0)和B_{i,n}(1)均为0。 B0,n​(0)=1和Bn,n​(1)=1,所有其他Bi,n​(0)和Bi,n​(1)均为0。
4.对称性:Bernstein基函数具有对称性,即:
B i , n ( t ) = B n − i , n ( 1 − t ) ; 这意味着它们在参数空间中是对称的。 B_{i,n}(t) = B_{n-i,n}(1-t);这意味着它们在参数空间中是对称的。 Bi,n​(t)=Bn−i,n​(1−t);这意味着它们在参数空间中是对称的。
5.递归性质:Bernstein基函数可以通过德卡斯特里奥算法(De Casteljau’s algorithm)递归地求解,这是一种计算Bézier曲线上的点的高效方法。

6.凸包性质:Bernstein多项式定义的曲线或曲面始终位于其控制点的凸包内,这保证了曲线或曲面的整体形状。

7.连续性和可微性:Bernstein基函数及其导数在( t )的整个定义域内都是连续的,这保证了它们定义的曲线或曲面具有良好的光滑性。

1.3.Bezier曲线的性质

1.参数化性质
Bezier曲线是参数化的,这意味着它的形状由一系列控制点和一个参数(t)决定,其中(t)在0到1之间变化。曲线的形状不依赖于坐标系的选择。

2.凸包性质
Bezier曲线始终位于其控制点的凸包内。这意味着曲线不会超出由控制点形成的凸多边形之外。这个性质有助于确保曲线的形状在预期的范围内。

3.仿射不变性
Bezier曲线的形状在仿射变换下不变。这意味着如果对曲线的控制点进行仿射变换(如平移、旋转、缩放),则曲线的形状不变,只需将变换应用于控制点即可。

4.端点插值
Bezier曲线的起点和终点分别与第一个和最后一个控制点重合。这意味着曲线的起点和终点是固定的,它们分别位于第一个和最后一个控制点上。

5.切线性质
在Bezier曲线的起点和终点处,曲线的切线分别与第一个和最后一个控制点形成的线段一致。这可以通过计算曲线在这些点的导数来证明。可以进一步证明,起点,终点处r阶导数只与r+1个相邻控制点有关。

6.控制点的权重
Bezier曲线的形状受到控制点的位置影响,控制点离曲线越远,其对曲线形状的影响越小。这种影响是通过Bernstein多项式来实现的,它是Bezier曲线表达式的一部分。

7.连续性
如果控制点被适当地选择,Bezier曲线可以具有很高的连续性,如(C0)(点连续)、(C1)(切线连续)和(C^2)(曲率连续)等。这使得Bezier曲线非常适合用于平滑的曲线和曲面设计。

1.4.Bezier曲线的几何作图法

下面详细介绍如何使用几何作图法来绘制二次和三次Bezier曲线。

二次Bezier曲线

二次Bezier曲线由三个控制点 ( P_0 ), ( P_1 ), ( P_2 ) 构成。曲线的定义如下:
B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 , 0 ≤ t ≤ 1 B(t) = (1-t)^2 P_0 + 2t(1-t) P_1 + t^2 P_2, \quad 0 \leq t \leq 1 B(t)=(1−t)2P0​+2t(1−t)P1​+t2P2​,0≤t≤1
几何作图法的步骤:

1.连接 ( P_0 ) 和 ( P_1 ) 以及 ( P_1 ) 和 ( P_2 )。

2.在 ( P_0 ) 到 ( P_1 ) 的连线上,取一点 ( Q_0 ),使得 :
P 0 Q 0 = t ⋅ P 0 P 1 ; P_0 Q_0 = t \cdot P_0 P_1; P0​Q0​=t⋅P0​P1​;
3.在 ( P_1 ) 到 ( P_2 ) 的连线上,取一点 ( Q_1 ),使得:
P 1 Q 1 = t ⋅ P 1 P 2 ; P_1 Q_1 = t \cdot P_1 P_2; P1​Q1​=t⋅P1​P2​;
4.连接 ( Q_0 ) 和 ( Q_1 ),并在其上取一点 ( B(t) ),使得 :
Q 0 B ( t ) = t ⋅ Q 0 Q 1 ; Q_0 B(t) = t \cdot Q_0 Q_1; Q0​B(t)=t⋅Q0​Q1​;
5.当 ( t ) 从 ( 0 ) 变化到 ( 1 ) 时,( B(t) ) 的轨迹即为二次Bezier曲线。

三次Bezier曲线

三次Bezier曲线由四个控制点 ( P_0 ), ( P_1 ), ( P_2 ), ( P_3 ) 构成。曲线的定义如下:
B ( t ) = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 , 0 ≤ t ≤ 1 ; B(t) = (1-t)^3 P_0 + 3t(1-t)^2 P_1 + 3t^2(1-t) P_2 + t^3 P_3, \quad 0 \leq t \leq 1; B(t)=(1−t)3P0​+3t(1−t)2P1​+3t2(1−t)P2​+t3P3​,0≤t≤1;
几何作图法的步骤:

1.连接 ( P_0 ) 和 ( P_1 ), ( P_1 ) 和 ( P_2 ), 以及 ( P_2 ) 和 ( P_3 )。

2.在 ( P_0 ) 到 ( P_1 ) 的连线上,取一点 ( Q_0 ),使得 :
P 0 Q 0 = t ⋅ P 0 P 1 ; P_0 Q_0 = t \cdot P_0 P_1; P0​Q0​=t⋅P0​P1​;
3.在 ( P_1 ) 到 ( P_2 ) 的连线上,取一点 ( Q_1 ),使得:
P 1 Q 1 = t ⋅ P 1 P 2 ; P_1 Q_1 = t \cdot P_1 P_2; P1​Q1​=t⋅P1​P2​;
4.在 ( P_2 ) 到 ( P_3 ) 的连线上,取一点 ( Q_2 ),使得:
P 2 Q 2 = t ⋅ P 2 P 3 ; P_2 Q_2 = t \cdot P_2 P_3; P2​Q2​=t⋅P2​P3​;
5.连接 ( Q_0 ) 和 ( Q_1 ),并在其上取一点 ( R_0 ),使得:
Q 0 R 0 = t ⋅ Q 0 Q 1 ; Q_0 R_0 = t \cdot Q_0 Q_1; Q0​R0​=t⋅Q0​Q1​;
6.连接 ( Q_1 ) 和 ( Q_2 ),并在其上取一点 ( R_1 ),使得 :
Q 1 R 1 = t ⋅ Q 1 Q 2 ; Q_1 R_1 = t \cdot Q_1 Q_2; Q1​R1​=t⋅Q1​Q2​;
7.连接 ( R_0 ) 和 ( R_1 ),并在其上取一点 ( B(t) ),使得:
R 0 B ( t ) = t ⋅ R 0 R 1 ; R_0 B(t) = t \cdot R_0 R_1; R0​B(t)=t⋅R0​R1​;
8.当 ( t ) 从 ( 0 ) 变化到 ( 1 ) 时,( B(t) ) 的轨迹即为三次Bezier曲线。

2.Bezier曲面

Bezier曲面是计算机图形学中用于描述和渲染复杂曲面的一种数学模型。它是由法国工程师皮埃尔·贝塞尔(Pierre Bézier)在20世纪60年代为汽车设计而开发的。Bezier曲面可以通过控制点来定义,这些控制点可以直观地调整曲面的形状。

基本概念

Bezier曲面通常是通过将两个Bezier曲线组合而成的。一个二维的Bezier曲面可以通过以下方式定义:

  1. 控制点
    一组控制点(通常称为控制网格),这些点定义了曲面的形状。 对于一个 n × m 的 B e z i e r 曲面,有 ( n + 1 ) × ( m + 1 ) 个控制点。 一组控制点(通常称为控制网格),这些点定义了曲面的形状。\\ 对于一个n \times m的Bezier曲面,有(n+1) \times (m+1)个控制点。 一组控制点(通常称为控制网格),这些点定义了曲面的形状。对于一个n×m的Bezier曲面,有(n+1)×(m+1)个控制点。

  2. 基函数
    使用 B e r n s t e i n 多项式作为基函数,这些函数定义了每个控制点对曲面上特定点的影响。 使用Bernstein多项式作为基函数,这些函数定义了每个控制点对曲面上特定点的影响。 使用Bernstein多项式作为基函数,这些函数定义了每个控制点对曲面上特定点的影响。

  3. 参数化
    曲面通过两个参数 u 和 v 进行参数化,这两个参数在 0 到 1 之间变化。 曲面通过两个参数u和v进行参数化,这两个参数在0到1之间变化。 曲面通过两个参数u和v进行参数化,这两个参数在0到1之间变化。

数学表示

一个二维的Bezier曲面可以通过以下公式表示:

S ( u , v ) = ∑ i = 0 n ∑ j = 0 m B i , n ( u ) B j , m ( v ) P i , j S(u, v) = \sum_{i=0}^n \sum_{j=0}^m B_{i, n}(u) B_{j, m}(v) P_{i, j} S(u,v)=i=0∑n​j=0∑m​Bi,n​(u)Bj,m​(v)Pi,j​

其中:

  • S ( u , v ) 是曲面上参数为 ( u , v ) 的点。 S(u, v) 是曲面上参数为(u, v)的点。 S(u,v)是曲面上参数为(u,v)的点。

  • B i , n ( u ) 和 B j , m ( v ) 是 B e r n s t e i n 基函数,定义为: B_{i, n}(u) 和 B_{j, m}(v) 是Bernstein基函数,定义为: Bi,n​(u)和Bj,m​(v)是Bernstein基函数,定义为:

    B i , n ( u ) = C ( n , i ) u i ( 1 − u ) n − i B_{i, n}(u) = C(n, i) u^i (1 - u)^{n-i} Bi,n​(u)=C(n,i)ui(1−u)n−i
    B j , m ( v ) = C ( m , j ) v j ( 1 − v ) m − j B_{j, m}(v) = C(m, j) v^j (1 - v)^{m-j} Bj,m​(v)=C(m,j)vj(1−v)m−j

  • P i , j 是控制点。 P_{i, j} 是控制点。 Pi,j​是控制点。

  • C ( n , i ) 是组合数,定义为: C(n, i) 是组合数,定义为: C(n,i)是组合数,定义为:

    C ( n , i ) = n ! i ! ( n − i ) ! C(n, i) = \frac{n!}{i!(n-i)!} C(n,i)=i!(n−i)!n!​

展开示例

假定上述n为2,m为3,则S(u, v)展开式为:

计算Bernstein基函数

对于 B i , 2 ( u ) 和 B j , 3 ( v ) ,我们有: 对于 B_{i, 2}(u) 和 B_{j, 3}(v),我们有: 对于Bi,2​(u)和Bj,3​(v),我们有:

  • 对于 i = 0 , 1 , 2 , B i , 2 ( u ) 的表达式为: 对于 i = 0, 1, 2,B_{i, 2}(u) 的表达式为: 对于i=0,1,2,Bi,2​(u)的表达式为:

    B 0 , 2 ( u ) = C ( 2 , 0 ) u 0 ( 1 − u ) 2 = ( 1 − u ) 2 B_{0, 2}(u) = C(2, 0) u^0 (1 - u)^2 = (1 - u)^2 B0,2​(u)=C(2,0)u0(1−u)2=(1−u)2
    B 1 , 2 ( u ) = C ( 2 , 1 ) u 1 ( 1 − u ) 1 = 2 u ( 1 − u ) B_{1, 2}(u) = C(2, 1) u^1 (1 - u)^1 = 2u(1 - u) B1,2​(u)=C(2,1)u1(1−u)1=2u(1−u)
    B 2 , 2 ( u ) = C ( 2 , 2 ) u 2 ( 1 − u ) 0 = u 2 B_{2, 2}(u) = C(2, 2) u^2 (1 - u)^0 = u^2 B2,2​(u)=C(2,2)u2(1−u)0=u2

  • 对于 j = 0 , 1 , 2 , 3 , B j , 3 ( v ) 的表达式为: 对于 j = 0, 1, 2, 3,B_{j, 3}(v) 的表达式为: 对于j=0,1,2,3,Bj,3​(v)的表达式为:

    B 0 , 3 ( v ) = C ( 3 , 0 ) v 0 ( 1 − v ) 3 = ( 1 − v ) 3 B_{0, 3}(v) = C(3, 0) v^0 (1 - v)^3 = (1 - v)^3 B0,3​(v)=C(3,0)v0(1−v)3=(1−v)3
    B 1 , 3 ( v ) = C ( 3 , 1 ) v 1 ( 1 − v ) 2 = 3 v ( 1 − v ) 2 B_{1, 3}(v) = C(3, 1) v^1 (1 - v)^2 = 3v(1 - v)^2 B1,3​(v)=C(3,1)v1(1−v)2=3v(1−v)2
    B 2 , 3 ( v ) = C ( 3 , 2 ) v 2 ( 1 − v ) 1 = 3 v 2 ( 1 − v ) B_{2, 3}(v) = C(3, 2) v^2 (1 - v)^1 = 3v^2(1 - v) B2,3​(v)=C(3,2)v2(1−v)1=3v2(1−v)
    B 3 , 3 ( v ) = C ( 3 , 3 ) v 3 ( 1 − v ) 0 = v 3 B_{3, 3}(v) = C(3, 3) v^3 (1 - v)^0 = v^3 B3,3​(v)=C(3,3)v3(1−v)0=v3

展开公式

将Bernstein基函数代入原公式,展开并计算:

S ( u , v ) = ∑ i = 0 2 ∑ j = 0 3 B i , 2 ( u ) B j , 3 ( v ) P i , j S(u, v) = \sum_{i=0}^2 \sum_{j=0}^3 B_{i, 2}(u) B_{j, 3}(v) P_{i, j} S(u,v)=i=0∑2​j=0∑3​Bi,2​(u)Bj,3​(v)Pi,j​

$$
= B_{0, 2}(u) B_{0, 3}(v) P_{0, 0} + B_{0, 2}(u) B_{1, 3}(v) P_{0, 1} + B_{0, 2}(u) B_{2, 3}(v) P_{0, 2} + B_{0, 2}(u) B_{3, 3}(v) P_{0, 3} \

  • B_{1, 2}(u) B_{0, 3}(v) P_{1, 0} + B_{1, 2}(u) B_{1, 3}(v) P_{1, 1} + B_{1, 2}(u) B_{2, 3}(v) P_{1, 2} + B_{1, 2}(u) B_{3, 3}(v) P_{1, 3} \
  • B_{2, 2}(u) B_{0, 3}(v) P_{2, 0} + B_{2, 2}(u) B_{1, 3}(v) P_{2, 1} + B_{2, 2}(u) B_{2, 3}(v) P_{2, 2} + B_{2, 2}(u) B_{3, 3}(v) P_{2, 3}
    $$

$$
= (1 - u)^2 (1 - v)^3 P_{0, 0} + (1 - u)^2 3v(1 - v)^2 P_{0, 1} + (1 - u)^2 3v^2(1 - v) P_{0, 2} + (1 - u)^2 v^3 P_{0, 3} \

  • 2u(1 - u) (1 - v)^3 P_{1, 0} + 2u(1 - u) 3v(1 - v)^2 P_{1, 1} + 2u(1 - u) 3v^2(1 - v) P_{1, 2} + 2u(1 - u) v^3 P_{1, 3} \
  • u^2 (1 - v)^3 P_{2, 0} + u^2 3v(1 - v)^2 P_{2, 1} + u^2 3v^2(1 - v) P_{2, 2} + u^2 v^3 P_{2, 3}
    $$

这就是 B e z i e r 曲面公式 S ( u , v ) 的展开形式,其中 P i , j 是控制点。 这个公式描述了一个由 16 个控制点定义的 2 ∗ 3 的 B e z i e r 曲面,其中 u 和 v 在 [ 0 , 1 ] 范围内变化。 这就是Bezier曲面公式 S(u, v) 的展开形式,其中 P_{i, j} 是控制点。\\ 这个公式描述了一个由16个控制点定义的2*3的Bezier曲面,其中 u 和 v 在 [0, 1] 范围内变化。 这就是Bezier曲面公式S(u,v)的展开形式,其中Pi,j​是控制点。这个公式描述了一个由16个控制点定义的2∗3的Bezier曲面,其中u和v在[0,1]范围内变化。

标签:Bezier,定义,--,曲线,控制点,曲面,拟合,Bernstein
From: https://blog.csdn.net/x13262608581/article/details/139876941

相关文章

  • 懂得HR的潜台词(四)——你为什么想来我们公司?
    1、解答思路1.1【潜台词】    不要说,我对你的行业领域很感兴趣,想来学习相关技能,我想知道你是否了解我们公司 1.2【回答思路】        考察动机和热情+判断对公司的了解程度+确认匹配度+了解你的职业规划+观察价值观+探测稳定性+ 看你的说服......
  • 懂得HR的潜台词(三)——你最近都面试了哪些公司,都进展到什么阶段了?
    1、解答思路1.1【潜台词】        1)看你在市场上行情如何,是否抢手,提前预判下好不好谈薪压价        2)你会不会放我的鸽子,你来的概率大不大?  1.2【回答思路】        目前正在看机会,陆续有在面试中,也拿到了几家offer(不说公司具体名字),也会综合......
  • 懂得HR的潜台词(一)——做一下自我介绍吧
    1、解答思路1.1【潜台词】        千万不要照着简历念!,我不在乎你什么时候毕业,工作过几家公司,我只在乎你的技能和优势,是否和我们的岗位匹配。 1.2【回答思路】        个人简单介绍+与应聘岗位相符合的经历、技能和优势。2、参考回答尊敬的面试官,您......
  • 优秀毕业设计--基于SpringBoot和Vue的校园积分系统 的设计与实现
    为了方便学生在校信息管理,本文设计了学生 校园积分系统,在该系统中,每个学生都有一个自 己的唯一账户,用于在校期间记录自己的积分。该 系统可以方便统计学生从入学开始,在校的活动信 息,便于学生了解自己的信息。1.研究背景随着信息技术的发展,学校信息化也在快速进 步......
  • yznu软件测试大作业
    目录一、软件项目介绍...........................................................1二、测试计划...............................................................1三、测试用例...............................................................2(一)黑盒测试.........
  • 项目开发团队分配管理
    需求分析该系统的主要分成四大模块:用户注册和登录、开发人员管理、开发团队调度管理和开发项目管理。其中的细节如下图所示该软件实现以下功能:软件启动时,首先进入登录界面进行注册和登录功能。当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。然后可以对开......
  • yznu软件工程题库2023年
    一.单选题(共6题,34.8分)1. (单选题)瀑布模型适合如下哪类软件的开发( )A.大型复杂的、且需求尚不能完全确定的软件B.开发中或运行后需求可能会发生变化的软件C.有潜在开发风险的软件D.规模较小、软件需求比较稳定的项目或子系统正确答案: D5.8分2. (单选题)某软件开......
  • 三生随记——诡异的牙线
    在小镇的角落,坐落着一间古老的牙医诊所。这所诊所早已荒废多年,窗户上爬满了藤蔓,门板上的油漆斑驳脱落,仿佛诉说着无尽的沉寂与孤独。然而,在午夜时分,偶尔会有低沉的呻吟声从紧闭的诊所里传出,让路过的人毛骨悚然。镇上流传着一个关于这所诊所的恐怖传说:诊所里住着一个被诅咒......
  • dotnet 6 破坏性改动 仅引用程序集输出路径变更
    在dotnet5开始,可以设置ProduceReferenceAssembly为true让项目构建时输出仅引用程序集。仅引用程序集是仅导出项目的公开成员定义,而不包含具体的实现的代码逻辑。只用来被其他项目引用,体积很小,但不用来作为最终发布文件在此前的如下博客里面已经告诉大家如何创建仅引用程序......
  • Base64编码
    URL编码是对字符进行编码,表示成%xx​的形式,而Base64编码是对二进制数据进行编码,表示成文本格式。‍为什么需要Base64编码Base64编码的目的是把二进制数据变成文本格式,这样在很多文本中就可以处理二进制数据。例如,电子邮件协议就是文本协议,如果要在电子邮件中添加一个二......