非均匀有理B-样条(Non-Uniform Rational B-Splines, NURBS)基础知识

article/2025/8/21 9:19:04

B样条是无理的,组成无理B样条曲线或曲面。有理曲线或曲面可以精确地表示圆锥截面。非均匀有理B样条(Non-Uniform Rational B-Splines, NURBS)就是为了表达更精确的曲面引入的,其控制顶点包含权重。NURBS的基函数与B样条不同,但结点向量、张量积的性质和细分规则是不变的。

1 几何角度

R d \mathbb{R}^d Rd空间的NURBS实体通过在 R d + 1 \mathbb{R}^{d+1} Rd+1空间的B样条实体投影得到,其中 d d d是维数。图1说明了一个在 R 2 \mathbb{R}^2 R2空间的半圆 C ( ξ ) C(\xi) C(ξ)是如何通过在 R 3 \mathbb{R}^3 R3空间的二次B样条曲线 C w ( ξ ) C^w(\xi) Cw(ξ)得到的。

控制顶点 P i \mathbf{P}_i Pi的表示如下
( P i ) j = ( P i w ) j w i j = 1 , … , d (1) (\mathbf{P}_i)_j=\frac{(\mathbf{P}_i^w)_j}{w_i} \quad j=1,\dots,d \tag{1} (Pi)j=wi(Piw)jj=1,,d(1)
其中 w i = ( P i w ) d + 1 w_i=(\mathbf{P}_i^w)_{d+1} wi=(Piw)d+1 P i w \mathbf{P}_i^w Piw是“投影控制顶点”。权重 w i w_i wi在几何上是“投影控制顶点”的“高”,见图1。也就是说 R d \mathbb{R}^{d} Rd维的NURBS实体中的控制顶点,是维的B样条控制顶点前几维分量除以最后一维分量得到的。

image-20210310103405887

图1     B样条曲线投影到z=1平面,得到NURBS半圆

从几何上来讲,在NURBS中进行结点插入首先要将NURBS中的控制顶点投影到 R d + 1 \mathbb{R}^{d+1} Rd+1维空间,之后使用B样条结点插入公式计算插入后的控制顶点,最后再将其投影到 R d \mathbb{R}^d Rd维空间得到新的NURBS控制顶点。

2 代数角度

NURBS曲线的基函数表示为
R i p ( ξ ) = N i , p ( ξ ) w i W ( ξ ) = N i , p ( ξ ) w i ∑ i ^ = 1 n N i ^ , p ( ξ ) w i (2) R_{i}^{p}(\xi)=\frac{N_{i, p}(\xi) w_{i}}{W(\xi)}=\frac{N_{i, p}(\xi) w_{i}}{\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}(\xi) w_{i}} \tag{2} Rip(ξ)=W(ξ)Ni,p(ξ)wi=i^=1nNi^,p(ξ)wiNi,p(ξ)wi(2)
其中, W ( ξ ) = ∑ i ^ = 1 n N i ^ , p ( ξ ) w i ^ W(\xi)=\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}(\xi) w_{\hat{i}} W(ξ)=i^=1nNi^,p(ξ)wi^是权重函数, N i , p ( ξ ) w i N_{i, p}(\xi) w_{i} Ni,p(ξ)wi是B样条基函数。

定义权重的对角矩阵
W = [ w 1 w 2 ⋱ w n ] (3) \mathbf{W}=\left[\begin{array}{llll} w_{1} & & & \\ & w_{2} & & \\ & & \ddots & \\ & & & w_{n} \end{array}\right] \tag{3} W=w1w2wn(3)
N ( ξ ) \mathbf{N}(\xi) N(ξ)是表示B样条基函数的列向量,则式(2)可以写成矩阵形式
R ( ξ ) = 1 W ( ξ ) W N ( ξ ) (4) \mathbf{R}(\xi)=\frac{1}{W(\xi)}\mathbf{W}\mathbf{N}(\xi) \tag{4} R(ξ)=W(ξ)1WN(ξ)(4)
NURBS曲面的基函数可以表示为
R i , j p , q ( ξ , η ) = N i , p ( ξ ) M i , p ( ξ ) w i , j ∑ i ^ = 1 n ∑ j ^ = 1 m N i ^ , p ( ξ ) M j ^ , q ( ξ ) w i = 1 W ( ξ , η ) W N ( ξ , η ) (5) R_{i,j}^{p,q}(\xi,\eta)=\frac{N_{i, p}(\xi)M_{i, p}(\xi) w_{i,j}}{\sum_{\hat{i}=1}^{n} \sum_{\hat{j}=1}^{m} N_{\hat{i}, p}(\xi) M_{\hat{j}, q}(\xi) w_{i}}=\frac{1}{W(\xi,\eta)} \mathbf{W}\mathbf{N}(\xi,\eta) \tag{5} Ri,jp,q(ξ,η)=i^=1nj^=1mNi^,p(ξ)Mj^,q(ξ)wiNi,p(ξ)Mi,p(ξ)wi,j=W(ξ,η)1WN(ξ,η)(5)
NURBS基函数与B样条基函数有相同的性质。

NURBS基函数的一阶导数
d d ξ R i p ( ξ ) = w i W ( ξ ) N i , p ′ ( ξ ) − W ′ ( ξ ) N i , p ( ξ ) W 2 ( ξ ) (6) \frac{d}{d \xi} R_{i}^{p}(\xi)=w_{i} \frac{W(\xi) N_{i, p}^{\prime}(\xi)-W^{\prime}(\xi) N_{i, p}(\xi)}{W^{2}(\xi)} \tag{6} dξdRip(ξ)=wiW2(ξ)W(ξ)Ni,p(ξ)W(ξ)Ni,p(ξ)(6)
其中 N i , p ′ ( ξ ) = d d ξ N i , p ( ξ ) N_{i, p}^{\prime}(\xi)=\frac{d}{d\xi}N_{i,p}(\xi) Ni,p(ξ)=dξdNi,p(ξ) W ′ ( ξ ) = ∑ i ^ = 1 n N i ^ , p ′ ( ξ ) w i ^ W^{\prime}(\xi)=\sum_{\hat{i}=1}^{n} N_{\hat{i}, p}^ {\prime}(\xi) w_{\hat{i}} W(ξ)=i^=1nNi^,p(ξ)wi^

在NURBS基函数确定之后,NURBS曲面便可以使用与B样条曲面类似的形式表示
C ( ξ ) = ∑ i = 1 n R i p ( ξ ) P i (7) \mathbf{C(\xi)}=\sum^n_{i=1} R_i^p(\xi) \mathbf{P}_i \tag{7} C(ξ)=i=1nRip(ξ)Pi(7)
NURBS曲面
S ( ξ , η ) = ∑ i = 1 n ∑ j = 1 m R i , j p , q ( ξ , η ) P i , j (8) \mathbf{S(\xi,\eta)}=\sum^n_{i=1} \sum^m_{j=1} R_{i,j}^{p,q}(\xi,\eta) \mathbf{P}_{i,j} \tag{8} S(ξ,η)=i=1nj=1mRi,jp,q(ξ,η)Pi,j(8)

3 一些例子

这里,我们将画一个半圆。我们使用二次NURBS基函数,控制顶点和权重如下
P = [ x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4 ] = [ − 1 0 − 1 1 1 1 1 0 ] a n d w = [ w 1 w 2 w 3 w 4 ] = [ 1 1 / 2 1 / 2 1 ] (9) \mathbf{P}=\left[\begin{array}{ll} x_{1} & y_1 \\ x_{2} & y_2 \\ x_{3} & y_3 \\ x_{4} & y_4 \end{array}\right]= \left[\begin{array}{ll} -1 & 0 \\ -1 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right] \quad\quad\quad\quad and \quad\quad\quad\quad \mathbf{w}=\left[\begin{array}{ll} w_{1} \\ w_{2} \\ w_{3} \\ w_{4} \end{array}\right]= \left[\begin{array}{ll} 1 \\ 1/2 \\ 1/2 \\ 1 \end{array}\right] \tag{9} P=x1x2x3x4y1y2y3y4=11110110andw=w1w2w3w4=11/21/21(9)
假设NURBS基函数和曲线在点 ξ = 3 / 2 \xi=3/2 ξ=3/2求值,则根据B样条基函数的表达式可以算出

image-20210310160119952

再根据式(2)计算出权函数在 ξ = 3 / 2 \xi=3/2 ξ=3/2时的值为
W ( ξ = 3 2 ) = ∑ i = 1 4 N i , 2 ( ξ = 3 2 ) w i = 0 ⋅ 1 + 1 8 ⋅ 1 2 + 5 8 ⋅ 1 2 + 1 4 ⋅ 1 = 5 8 (10) W(\xi=\frac{3}{2})=\sum_{i=1}^4N_{i,2}(\xi=\frac{3}{2})w_i=0\cdot1+\frac{1}{8}\cdot\frac{1}{2}+\frac{5}{8}\cdot\frac{1}{2}+\frac{1}{4}\cdot1=\frac{5}{8} \tag{10} W(ξ=23)=i=14Ni,2(ξ=23)wi=01+8121+8521+411=85(10)
于是,可以得到NURBS基函数在 ξ = 3 / 2 \xi=3/2 ξ=3/2处的值

image-20210310160804118

当计算足够多个 ξ \xi ξ的值时,就可以画出NURBS基函数的图像,如图2所示

image-20210310161209708

图2     NURBS和B样条基函数,结点向量为{0,0,0,1,2,2,2}

可以看出,权重 w 2 , w 3 w_2,w_3 w2,w3不仅仅影响基函数 R 2 2 , R 3 2 R_2^2,R_3^2 R22,R32也影响 R 1 2 , R 4 2 R_1^2,R_4^2 R12,R42

之后我们就可以使用给定的节点向量计算NURBS曲线上的点

image-20210310162333150

作为比较,B样条曲线在同样的参数域的坐标计算结果如下

image-20210310162454194

当计算足够多 ξ \xi ξ的值之后,就可以画出NURBS曲线和B样条曲线的图像。由于B样条曲线不包含权重(所有权重为1),所以控制点(−1,1)和(1,1)的比例会变得很大,使圆弧呈方形。
image-20210310162800665

图3     使用NURBS构造的半圆和B样条构造的180度弧

注意,这里使用4个控制顶点构造的半圆在顶点 ( 0 , 1 ) (0,1) (0,1)处有 C 1 C^1 C1连续性。使用结点向量 Ξ = { 0 , 0 , 0 , 1 , 1 , 2 , 2 , 2 } \Xi=\{0,0,0,1,1,2,2,2\} Ξ={0,0,0,1,1,2,2,2},5个基函数和控制顶点,构造的半圆拥有 C 0 C^0 C0连续性。在图1中的半圆就是使用上述的节点向量构造的,其 C 0 C^0 C0连续性可以在与其对应的B样条中看出。


http://chatgpt.dhexx.cn/article/P0EmPiI3.shtml

相关文章

MATLAB实现NURBS逼近曲线拟合及界面

目录 前言 一、数据点参数化 1.1原因 1.2方法 1.3代码(封装到类) 二、节点矢量计算 2.1方法 2.2代码 三、最小二乘反算控制点 四、基函数实现 五、豪斯多夫距离 六、离散曲率 总结 前言 采用matlab实现NURBS逼近曲线的拟合,利用app designer实现拟合的界…

NURBS Curves

文章目录 1. 定义2. 性质2.1 NURBS基函数的性质2.2 NURBS曲线的性质 3. 修改权重4. 相关算法4.1 节点插入:单点插入4.2 De Boors Algorithm 5. Rational Bzier Curves6. Rational Bzier Curves: Conic Sections7. Circular Arcs and Circles 1. 定义 NURBS&#xff…

Matlab中安装NURBS工具箱及使用

文章目录 前言一、NURBS工具箱的安装1 打开matlab,点击附加功能2 输入nurbs3 下载后压缩包解压4 将解压后的文件夹放到matlab文件夹的toolbox文件夹里面5 选择“预设路径”上方的“预设” 二、NURBS工具箱的使用2.1 NURBS 结构:2.2 对NURBS工具箱的初步理…

计算几何07_NURBS曲线与曲面

B样条方法在表示与设计自由曲线曲面时展现出强大的威力,但在设计与表示初等曲线曲面时却遇到了麻烦。因为B样条曲线、及其特例的Bezier曲线都不能精确表示除抛物线以外的二次曲线弧,B样条曲面、及其特例的Bezier曲面都不能精确表示除抛物面以外的二次曲面…

利用NURBS曲线进行点云曲面拟合算法

文章目录 介绍NURBS曲线C实现思路代码实现读取点云数据对点云进行预处理创建曲面模型将曲面模型转换为NURBS曲面 完整代码opennurbs.h说明vs2019安装OpenNURBS库编译OpenNURBS库 介绍 点云拟合曲面算法是将点云数据拟合成一个二次或高次曲面模型的算法。这种算法主要用于三维模…

离散数据点NURBS曲线拟合算法

问题描述:对于离散数据点集来说,其主要特征点一般可以描述原始曲线轨迹的基本形状。对于大量的离散数据点来说,提取主要的特征点后在进行曲线拟合,这样可以降低计算次数,极高拟合效率。 可以描述原始曲线几何形状的 特…

Nurbs建模

多边形建模和Nurbs建模 Nurbs始终有四个侧面,由有理多项式方程创立的曲线,由控制点定义的曲线。 Nurbs曲线是由一系列多项式构成的:axb0,ax^2bxc0… 能够将任何平面转换为Nurbs NURBS能买构建几乎所有的形状

matlab中Nurbs库的简单使用

文章目录 前言一、简单例子二、复杂一点的NUrbs曲面nrbeval函数 前言 只是为方便学习,不做其他用途,记录matlab中Nurbs的使用,好像记得是添加的matlab中的一个Nurbs库来着。前一段使用,现在不记得了,使用这个程序得先安…

NURBS

非均匀有理样条NURBS( Non-Uniform Rational B-Splines ) 是近年来发展迅速,应用广泛的一种表示曲线曲面造型技术。它能够精确地表示二次规则曲线曲面,从而能用统一的数学形式表示规则曲面与自由曲面,具有可影响曲线曲面形状的权因子&#xf…

【Matlab-NURBS工具箱简要教程及实例 】

Matlab-NURBS工具箱使用教程 添加NURBS工具箱 在附加功能里添加NURBS工具箱 安装完成后可以在’函数’处查看API,也打开文件夹查看。 强烈推荐同步安装gnurbs工具,它完全代替nrbplot展示曲面,且允许用户进行节点拖拽等操作。 NURBS 结…

Nurbs曲线详解

NURBS(Non Uniform Rational B-spline)曲线通常称为非均匀有理B样条曲线,其数学定义如下: 基函数由递推公式定义: 非均匀:指节点向量的值与间距可以为任意值。这样我们可以在不同区间上得到不同的混合…

NURBS曲面结构及生成原理、修改方法

NURBS全称是Non-Uniform Rational B-Splines中文叫做非均匀有理B样条曲线,Rhinoceros中的模型曲线便是通过NRUBS曲线进行描述,曲面则是通过U和V两个方向的曲线集合来得到,如图: Rhino如何生产曲面原理 由上图我们发现就像织布一样…

MySQL数据库增量备份及恢复方案

MySQL数据库增量备份及恢复方案 u 前言 操作系统崩溃、电源故障、文件系统崩溃和硬件故障等异常状况都可能导致我们正在使用的数据库出现故障而产生数据库中数据不一致的情况。为了保证数据库使用安全,必须定期备份数据库;数据库备份可以分为&#xff1…

差异增量备份和累积增量备份区别(有图)

所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块。RMAN中增量备份有两种:Differential 方式和Cumulative方式。 1、差异增量备份Differential 说起Differential,相当有意思,大家可以这样理解。有一…

数据库的备份与恢复(完全备份,增量备份)

目录 1. 数据库备份的分类1.1 从物理与逻辑的角度,备份可分为1.2 从数据库的备份策略角度,备份可分为 2. 常见的备份方法3. MySQL完全备份与分类3.1 完全备份概述3.2 备份方式3.2.1 物理冷备份及恢复3.2.2 使用专用备份工具 mysqldump3.2.2.1 备份库3.2.…

图解完全备份,增量备份,差异备份

因为网上说的全部都是copy的,所以自己去理解了一下然后整理了一下。 完全备份 完成备份我相信大家都理解,就是一下子备份所有的内容。 增量备份 如上图所示,比如一家公司,周一这家公司进行完全备份,然后周二备份周一…

MySQL 增量备份与恢复

目录 引言一、MySQL 增量备份1. 增量备份特点2. 示例 二、MySQL 增量恢复1. 增量恢复的场景2. 丢失完全备份之后更改的数据的恢复3. 完全备份之后丢失所有数据4. 基于时间点与位置的恢复4.1 基于时间点的恢复4.2 基于位置的恢复 5. 指定企业备份策略的思路 总结 引言 完全备份…

增量备份恢复

** 增量备份恢复案例 **1、配置mysql,设置日志文件 [rootlocalhost bak]# vim /etc/my.cnf 添加: log-binmysql-bin2、重启mysqld服务 systemctl restart mysqld查看日志文件: mysqlbinlog /usr/local/mysql/data/mysql-bin.0000013、创…

mysql实现增量备份

有点要注意 如果你误删了表 想通过这个恢复 必须恢复日志里面有创建表的日志 不然的话是无法回复的 就是必须是从你开始创建表的时候就已经记录日志了 恢复到哪个位置 就按照哪个位置来计算 mysql 5.0不支持增量备份 增量备份定义 mysql数据库会以二进制形式 自动把用户对my…

什么是全量备份,增量备份,差异备份?

背景 今天我司服务器工程大牛看我在备份数据,冷不丁提到了差异备份;但是才疏学浅的我却不知何为差异备份,故而以此为引,开始了对全量备份,增量备份,差异备份这三者的研习;经过一番寻觅,最终找到了他们.呵呵 希望大家有所受益! 问题 1. 什么是全量备份? 2. 什么是增量…