Bezier曲线曲面--拟合技术

2024-06-22 11:20

本文主要是介绍Bezier曲线曲面--拟合技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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=0nPibi,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(1t)ni=i!(ni)!n!ti(1t)ni

这里,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)=(1t)2P0+2t(1t)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)=(1t)3P0+3t(1t)2P1+3t2(1t)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(1t)nifori=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=0nBi,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)=1Bn,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)=Bni,n(1t);这意味着它们在参数空间中是对称的。
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)=(1t)2P0+2t(1t)P1+t2P2,0t1
几何作图法的步骤:

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; P0Q0=tP0P1;
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; P1Q1=tP1P2;
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; Q0B(t)=tQ0Q1;
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)=(1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3,0t1;
几何作图法的步骤:

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; P0Q0=tP0P1;
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; P1Q1=tP1P2;
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; P2Q2=tP2P3;
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; Q0R0=tQ0Q1;
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; Q1R1=tQ1Q2;
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; R0B(t)=tR0R1;
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×mBezier曲面,有(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之间变化。 曲面通过两个参数uv进行参数化,这两个参数在01之间变化。

数学表示

一个二维的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=0nj=0mBi,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(1u)ni
    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(1v)mj

  • 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!(ni)!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,2Bi,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(1u)2=(1u)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(1u)1=2u(1u)
    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(1u)0=u2

  • 对于 j = 0 , 1 , 2 , 3 , B j , 3 ( v ) 的表达式为: 对于 j = 0, 1, 2, 3,B_{j, 3}(v) 的表达式为: 对于j=0,1,2,3Bj,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(1v)3=(1v)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(1v)2=3v(1v)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(1v)1=3v2(1v)
    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(1v)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=02j=03Bi,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个控制点定义的23Bezier曲面,其中uv[0,1]范围内变化。

这篇关于Bezier曲线曲面--拟合技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084150

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的