B-样条基函数:计算实例

B-spline Basis Functions: Computation Examples

                                                                                                                  

上一页重要性质                回目录                  下一页定义


下面详细讨论两个实例,一个是简单节点(knot)的,另一个是多重节点的。

简单节点(Simple Knots )

假设节点向量是U = { 0, 0.25, 0.5, 0.75, 1 }. 因此, m = 4 和u0 = 0, u1 = 0.25, u2 = 0.5, u3 = 0.75 及 u4 = 1。0次(degree)基函数很简单。 它们分别是定义在节点跨度 [0,0.25,), [0.25,0.5), [0.5,0.75) 和 [0.75,1)上的N0,0(u), N1,0(u), N2,0(u)和N3,0(u) ,如下图所示。

下表给出了所有的Ni,1(u):

Basis Function

Range

Equation

N0,1(u)

[0, 0.25)

4u

[0.25, 0.5)

2(1 - 2u)

N1,1(u)

[0.25, 0.5)

4u - 1

[0.5, 0.75)

3 - u

N2,1(u)

[0.5, 0.75)

2(2u - 1)

[0.75, 1)

4(1 - u)

接着展示这些基函数的图形。因为内节点0.25, 0.5和0.75都是简单的(即, k = 1) 且p = 1,有p - k + 1 = 1非零基函数和三个节点。 而且, N0,1(u), N1,1(u) 和 N2,1(u)在节点0.25, 0.5 和 0.75分别是C0 连续的。

Ni,1(u)可计算2次基函数。因此m = 4, p = 2, 和 m = n + p + 1,我们有n = 1所以只有两个2次基函数:N0,2(u)和 N1,2(u). 结果见下表:

Basis Function

Range

Equation

N0,2(u)

[0, 0.25)

8u2

[0.25, 0.5)

-1.5 + 12u - 16 u2

[0.5, 0.75)

4.5 - 12u + 8 u2

N1,2(u)

[0.25, 0.5)

0.5 - 4u + 8u2

[0.5, 0.75)

-1.5 + 8u - 8u2

[0.75, 1)

8(1 - u)2

下图显示了两个基函数。三条垂直蓝线表示节点位置。注意每个基函数是三个2次曲线段的组合曲线。例如, N0,2(u) 是绿色曲线,其是定义在[0,0.25), [0.25, 0.5) 和 [0.5,0.75)上的三个抛物线的联合。这些曲线段连接在一起形成一个光滑的钟形。请验证 N0,2(u,) (resp., N1,2(u)) 在节点 0.25 和 0.5 (resp., 0.5 和 0.75)是 C1 连续的。如前页所提到的,在节点处,这个复合曲线是C1 连续的。

带正重复度的节点

如果一个节点向量包含有正重复度的节点,我们会遇到 0/0的情况,后面会遇到。因此我们定义 0/0 等于0。 幸运的是,这只用于手工计算的情况。对计算机实现,有个有效的算法,不受这个问题影响。如果ui 是重复度 k 的节点(即ui = ui+1 = ... = ui+k-1), 那么节点区间[ui,ui+1), [ui+1,ui+2), ..., [ui+k-2,ui+k-1) 不存在,结果是,Ni,0(u), Ni+1,0(u), ..., Ni+k-1,0(u) 都是零函数。

考虑节点向量 U = { 0, 0, 0, 0.3, 0.5, 0.5, 0.6, 1, 1, 1 }. 因此,0 和1 是重复度3 (即, 0(3)和  1(3)) 而 0.5 是重复度2 (即, 0.5(2)). 结果是, m = 9而节点分配是

u0

u1

u2

u3

u4

u5

u6

u7

u8

u9

0

0

0

0.3

0.5

0.5

0.6

1

1

1

现在计算 Ni,0(u)。 注意因为 m = 9 且 p = 0 ( 0 次基函数), 我们有n = m - p - 1 = 8。如下表所示,只有四个0次非零基函数: N2,0(u), N3,0(u), N5,0(u) 和 N6,0(u).

 基函数

范围

方程

备注

N0,0(u)

所有 u

0

因为 [u0, u1) = [0,0) 不存在

N1,0(u)

所有 u

0

因为 [u1, u2) = [0,0) 不存在

N2,0(u)

[0, 0.3)

1

N3,0(u)

[0.3, 0.5)

1

N4,0(u)

所有 u

0

因为 [u4, u5) = [0.5,0.5) 不存在

N5,0(u)

[0.5, 0.6)

1

N6,0(u)

[0.6, 1)

1

N7,0(u)

所有 u

0

因为 [u7, u8) = [1,1) 不存在

N8,0(u)

所有 u

0

因为 [u8, u9) = [1,1) 不存在

然后,我们继续计算1次基函数。因为 p 为 1, n = m - p - 1 = 7. 下表显示了结果:

      围   

    程    

N0,1(u)

所有 u

0

N1,1(u)

[0, 0.3)

1 - (10/3)u

N2,1(u)

[0, 0.3)

(10/3)u

[0.3, 0.5)

2.5(1 - 2u)

N3,1(u)

[0.3, 0.5)

5u - 1.5

N4,1(u)

[0.5, 0.6)

6 - 10u

N5,1(u)

[0.5, 0.6)

10u - 5

[0.6, 1)

2.5(1 - u)

N6,1(u)

[0.6, 1)

2.5u - 1.5

N7,1(u)

所有 u

0

下图显示了这些基函数的图形。

让我们看一个特别的计算,比如N1,1(u). 。它使用下式计算的:

u1 = u2 = 0 和 u3 = 0.3 代入这个方程产生下式:

因为 N1,0(u) 到处为零,第一项是0/0 因此被定义为零。因而,只有第二项对结果有影响。因为 N2,0(u) 在 [0,0.3)上是1, N1,1(u) 在 [0,0.3)上是1 - (10/3)u  。

接着,让我们计算所有的Ni,2(u)。因为 p = 2, 我们有 n = m - p - 1 = 6。下表包含了所有的Ni,2(u):

      数   

    

N0,2(u)

[0, 0.3)

(1 - (10/3)u)2

N1,2(u)

[0, 0.3)

(20/3)(u - (8/3)u2)

[0.3, 0.5)

2.5(1 - 2u)2

N2,2(u)

[0, 0.3)

(20/3)u2

[0.3, 0.5)

-3.75 + 25u - 35u2

N3,2(u)

[0.3, 0.5)

(5u - 1.5)2

[0.5, 0.6)

(6 - 10u)2

N4,2(u)

[0.5, 0.6)

20(-2 + 7u - 6u2)

[0.6, 1)

5(1 - u)2

N5,2(u)

[0.5, 0.6)

12.5(2u - 1)2

[0.6, 1)

2.5(-4 + 11.5u - 7.5u2)

N6,2(u)

[0.6, 1)

2.5(9 - 30u + 25u2)

下图显示了所有2次基函数。

让我们选一个典型的计算作为例子,如N3,2(u)。计算式是下式:

代入 u3 = 0.3, u4 = u5 = 0.5 和 u6 = 0.6得到

因为 N3,1(u) 在 [0.3, 0.5)上非零且等于5u - 1.5,(5u - 1.5)2N3,2(u) 在[0.3, 0.5)上的非零部分。因为N4,1(u) 在 [0.5, 0.6)上非零且等于6 - 10u, (6 - 10u)2N3,2(u) 在[0.5, 0.6)上的非零部分。

让我们研究在节点0.5(2)处的连续问题。因为它的重复度是2 且这些基函数的次数是 2, 基函数 N3,2(u) 在0.5(2)处是C0 连续的。这就是为什么N3,2(u) 在0.5(2)处有个尖锐的角。对不在两个端点处的节点,例如 0.3,保持了 C1 连续性因为它们都是简单节点。

上一页重要性质                回目录                  下一页定义

译注:

    • 本文翻译是“B-样条曲线(B-spline Curves)教程”中的一部分,其余翻译部分见“B-样条曲线(B-spline Curves)教程目录”。
    • “B-样条曲线(B-spline Curves)教程”是翻译自C.-K. Shene博士的CS3621 Introduction to Computing with Geometry Notes的第6部分“B-spline Curves”。
    • 本文原文地址:B-spline Basis Functions: Computation Examples   。
    • 本文首发“博士数学家园 ”

B-样条基函数:计算实例相关推荐

  1. B-spline曲线基函数计算Matlab程序

    B样条基函数的定义: 沿着下图所示的三角形进行计算: 这是关于B样条基函数的第一个重要的三角形,可以确定基函数的非零节点区间: B样条基函数Ni_j(u)的非零节点区间为[u(i),u(i+j+1)) ...

  2. B样条基函数的定义及系数的意义

    原文链接:http://blog.csdn.net/tuqu/article/details/5177405 贝塞尔基函数用作权重.B-样条基函数也一样:但更复杂.但是它有两条贝塞尔基函数所没有的特性 ...

  3. 用gismo中B样条基函数替代自己写的基函数

    文章目录 前言 一.需要添加[gismo库](https://blog.csdn.net/mw_1422102031/article/details/128966345?spm=1001.2014.3 ...

  4. B样条基函数:2.B样条基函数的定义和性质

    有很多办法可以用来定义B样条基函数以及证明它的一些重要性质.例如,可以采用截尾幂函数的差商定义,开花定义,以及由德布尔.考克斯和曼斯菲尔德等人提出的递推公式等来定义.这里采用递推定义方法,因为这种方法 ...

  5. B-spline Curves 学习之B样条基函数的定义与性质(2)

    转自:http://www.cnblogs.com/icmzn/p/5100761.html B-spline Basis Functions:Definition 贝塞尔基函数用作权重.B-样条基函 ...

  6. [Dask使用实例]Dask简单计算实例(map, submit)

    Dask简单计算实例 from dask.distributed import Client if __name__ == '__main__':client = Client()a = client ...

  7. AI降成本利器!阿里云弹性加速计算实例来了,最高节省50%推理成本

    简介:近日,阿里云推出了弹性加速计算实例(EAIS)家族及产品弹性加速推理实例(简称EAIS.EI),首次实现了GPU与CPU/内存的解耦,可在提升AI推理效率的同时大幅降低成本. 人工智能推理场景下 ...

  8. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  9. mobilenet cpu 加速_AI降成本利器!阿里云弹性加速计算实例来了,最高节省50%推理成本...

    简介:近日,阿里云推出了弹性加速计算实例(EAIS)家族及产品弹性加速推理实例(简称EAIS.EI),首次实现了GPU与CPU/内存的解耦,可在提升AI推理效率的同时大幅降低成本. 人工智能推理场景下 ...

最新文章

  1. Go的变量到底在堆还是栈中分配
  2. Ubuntu12.10 root用户登录设置
  3. SAP业务测评之库存预留
  4. SpringBoot-@ComponentScan、@Import
  5. MyBatis整合Spring的实现(2)
  6. 区块链监管的一年,剥离“币”的区块链技术该何去何从?
  7. [tp5] thinkPHP5-渲染模板的方式
  8. 目标检测矩形框与polygon数据增加--裁剪,拓展,旋转
  9. xpress-mp优化实例精选_量化研究每周精选-20170711
  10. mysql三张表关联查询成绩表_mysql三张表关联查询
  11. JavaWeb——springMVC异常处理器
  12. kaggle api 的使用
  13. 沙盘模拟软件_三连冠!我校学子连续三年蝉联全国大学生沙盘模拟经营大赛福建省决赛一等奖...
  14. Java过滤器与拦截器的区别
  15. 删除后别人的微信号变成wxid_“ 微信号 ” 和 “ 微信账号 ” 分别代表什么?...
  16. 浪潮配置ipim_浪潮服务器管理口IP设置_IPMI设置
  17. paddleocr cpp_infer 操作说明
  18. 前端模板标签eq与neq的使用,以及管理系统模块权限控制
  19. 逆势获投1亿,火眼金睛下的云适配BRaaS新模式引关注
  20. 单片机中断系统应用实例(两组实验+Proteus仿真+C源程序)

热门文章

  1. Android软件安全开发实践(上)
  2. JAVA循环语句和跳转语句
  3. 关于网站架构的几封邮件摘抄
  4. 彻底理解 模拟频率、数字频率、模拟角频率
  5. K-Village NFT 作品集
  6. 格式—C语言项目分文件
  7. 一加8和一加8pro区别
  8. Python 数组截取
  9. Redis使用场景概况
  10. Linux - Centos7系统破解root用户密码