IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【12月学习进度7/31——计算机图形学期末准备04】B样条曲线及其基函数的定义 -> 正文阅读

[人工智能]【12月学习进度7/31——计算机图形学期末准备04】B样条曲线及其基函数的定义

参考讲解视频

B样条曲线产生背景

1. Bezier曲线的不足:

  • 给定 n + 1 n+1 n+1 个控制点,则曲线的阶数 n n n 确定
    顶点数很多时,多项式阶数大,导数阶数大,曲线有很多极值点(导数为0的点),曲线产生振荡现象。
  • 使用低阶的Bezier曲线拼接较复杂(需要满足一定的连续性)
  • Bezier曲线不能做局部修改

“牵一发而动全身”:修改单个控制点,会改变整条曲线的形状
【原因分析】
B e r n s t e i n Bernstein Bernstein多项式 B j n ( t ) B^n_j(t) Bjn?(t) 对称,并且满足在 t ∈ ( 0 , 1 ) t∈(0,1) t(0,1) 时均不为0
(函数值不为0的区间通常叫做该函数的支撑区间
对称性如下图所示:

Bezier曲线:

b n ( t ) = ∑ j n b j ? B j n ( t ) b_n(t)=\sum_{j}^{n}b_j*B^n_j(t) bn?(t)=jn?bj??Bjn?(t)

相当于 B e r n s t e i n Bernstein Bernstein多项式对控制点 b j b_j bj? 的加权和
由于 B j n ( t ) ≠ 0 B^n_j(t)≠0 Bjn?(t)?=0 (在整个区间 [ 0 , 1 ] [0,1] [0,1] 上有支撑),所以每个控制点的改变都会影响整条Bezier曲线

2.B样条曲线的引入

图中7个混合函数 N i , 2 N_{i,2} Ni,2? ( i = 0 , 1 , 2...6 ) (i=0,1,2...6) (i=0,1,2...6)
每个混合函数的支撑区间只是 [ 0 , 1 ] [0,1] [0,1] 的一部分,例:

  • N 1 , 2 N_{1,2} N1,2? 的支撑区间是 [ 0 , 0.5 ] [0,0.5] [0,0.5]
  • N 2 , 2 N_{2,2} N2,2? 的支撑区间是 [ 0 , 0.5 ] [0,0.5] [0,0.5]
  • N 4 , 2 N_{4,2} N4,2?的支撑区间是 [ 0.5 , 1 ] [0.5,1] [0.5,1]

B样条曲线提出:保留全部Bezier曲线优点的同时,克服了其缺点
样条spline:分段连续多项式!)

整条曲线用一个完整的表达形式(但内在的量是低阶一段一段的)

【Example:三次样条
现有 n + 1 n+1 n+1 个点,每两个点之间构造一个多项式,则有 n n n 个小区间

  • 每个小区间构造一个三次多项式
  • n段三次多项式拼接在一起
  • 段与段之间要两次连续
  1. 采用Bezier曲线:5个点,则构造出4次多项式
  2. 采用三次样条:5个点,四段三次多项式,段间两次连续

3. B样条定义 vs Bezier曲线定义

B样条曲线数学表达式:

P ( u ) = ∑ j = 0 n P i ? B i , k ( u ) P(u)=\sum_{j=0}^nP_i*B_{i,k}(u) P(u)=j=0n?Pi??Bi,k?(u)
( u ∈ [ u k ? 1 , u n + 1 ] ) (u∈[u_{k-1},u_{n+1}]) (u[uk?1?,un+1?])

Bezier曲线数学表达式:

P ( u ) = ∑ j = 0 n P i ? B i , n ( u ) P(u)=\sum_{j=0}^nP_i*B_{i,n}(u) P(u)=j=0n?Pi??Bi,n?(u)
( u ∈ [ 0 , 1 ] ) (u∈[0,1]) (u[0,1])

不同之处

(1)B样条基函数与控制点个数 n + 1 n+1 n+1(或阶数 n n n)无关

  • B i , k ( u ) B_{i,k}(u) Bi,k?(u) k k k 阶( k ? 1 k-1 k?1 次)B样条基函数 k ∈ [ 2 , n + 1 ] k∈[2,n+1] k[2,n+1]

(2)两者参数 u u u的取值范围不同:

  • u ∈ [ u k ? 1 , u n + 1 ] u∈[u_{k-1},u_{n+1}] u[uk?1?,un+1?]
    在这里插入图片描述

4. B样条基函数定义 —— de Boor-Cox递推定义

【idea】
构造一种递推公式,由0次构造1次,1次构造2次,2次构造3次…最终构造出k阶(k-1次)的B样条基函数

并且约定 0 / 0 = 0 0/0=0 0/0=0
k阶的B样条基函数由两个k-1阶的B样条基函数线性组合而成

要确定第 i i i k k k 阶B样条 B i , k ( u ) B_{i,k}(u) Bi,k?(u)
要用到 u i , u i + 1 , . . . , u i + k u_i,u_{i+1},...,u_{i+k} ui?,ui+1?,...,ui+k? k + 1 k+1 k+1 个节点

[ u i , u i + k ] [u_i,u_{i+k}] [ui?,ui+k?] 称为 B i , k ( u ) B_{i,k}(u) Bi,k?(u)支撑区间

【推导举例】
1阶0次B样条:

2阶1次B样条:

3阶2次B样条:

【问题Question】

No.1:对 n + 1 n+1 n+1 个顶点, k k k 阶B样条曲线需要多少个节点向量 u i u_i ui? 与之匹配

  • B i , 1 B_{i,1} Bi,1? 1阶0次基函数:涉及1个区间 [ u i , u i + 1 ] [u_i,u_{i+1}] [ui?,ui+1?]2个节点
  • B i , 2 B_{i,2} Bi,2?(由 B i , 1 , B i + 1 , 1 B_{i,1},B_{i+1,1} Bi,1?,Bi+1,1?组成):2个区间 [ u i , u i + 1 ] , [ u i + 1 , u i + 2 ] [u_i,u_{i+1}],[u_{i+1},u_{i+2}] [ui?,ui+1?],[ui+1?,ui+2?]3个节点
  • B i , 3 B_{i,3} Bi,3?(由 B i , 2 , B i + 1 , 2 B_{i,2},B_{i+1,2} Bi,2?,Bi+1,2?组成):3个区间4个节点
  • B i , k B_{i,k} Bi,k?(由 B i , 2 , B i + 1 , 2 B_{i,2},B_{i+1,2} Bi,2?,Bi+1,2?组成):k个区间k+1个节点

i = n i=n i=n 时,第n段多项式,需要n+k+1个节点向量与之匹配

节点向量个数 n + k + 1 n+k+1 n+k+1 = 阶数 k k k + 顶点数 n + 1 n+1 n+1

No.2 :每个 p i p_i pi? 都有一个 B i , k ( u ) B_{i,k}(u) Bi,k?(u) 与之匹配,曲线的次数是 k ? 1 k-1 k?1 次,这条曲线的定义区间是什么?(Bezier曲线的定义区间是 [ 0 , 1 ] [0,1] [0,1]

函数定义区间合法 → 所有与顶点配对的基函数在该区间内都有定义(都覆盖)

  • u k ? 1 u_{k-1} uk?1? 是第一个基函数 B 0 , k B_{0,k} B0,k? 的结束节点前一个节点
  • u n + 1 u_{n+1} un+1? 是最后一个基函数 B n , k B_{n,k} Bn,k? 的开始节点后一个节点

5. 总结

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:48:54  更:2021-12-08 13:50:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 1:42:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码