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

article/2025/8/21 9:23:31

Matlab-NURBS工具箱使用教程

添加NURBS工具箱

在附加功能里添加NURBS工具箱
1
2
在这里插入图片描述
安装完成后可以在’函数’处查看API,也打开文件夹查看。
在这里插入图片描述
强烈推荐同步安装gnurbs工具,它完全代替nrbplot展示曲面,且允许用户进行节点拖拽等操作。
在这里插入图片描述

NURBS 结构:

曲线和曲面都由一个结构表示
与 Mathworks 的样条工具箱兼容

nurbs.form … 输入名称’B-NURBS’
nurbs.dim … 控制点的尺寸
nurbs.number … 控制点数
nurbs.coefs … 控制点
nurbs.order … 样条的阶数
nurbs.knots … 节点向量

关键API的用法

我们打开文件夹发现工具箱由4个脚本及55个函数组成:

  1. Contents.m —工具箱目录,包含36个API;
% demos- NURBS 演示
% nrbmak - 从控制点和节点构建 NURBS。
% nrbtform - 缩放、平移或旋转的变换矩阵。
% nrbkntins - 节点插入/细化。
% nrbdegelev - 度数提升。
% nrbderiv - NURBS 的导数结构。
% nrbdeval - NURBS 导数的求解。
% nrbkntmult - 求节点的多重性。
% nrbreverse - NURBS节点及核改为逆序并重构 。
% nrbtransp - 交换 NURBS 曲面的 U 和 V。
% nrbline - 构建NURBS表示的一条直线。
% nrbcirc - 构建NURBS表示的一个圆弧。
% nrbrect - 构造NURBS表示的一个矩形。
% nrb4surf - 由 4 个角点定义的一个面片。
% nrbeval - NURBS 曲线或曲面的求值。
% nrbextrude - 沿向量挤出 NURBS 曲线。
% nrbrevolve - 通过旋转轮廓构建曲面。
% nrbruled - 在两条NURBS 曲线之间生成直纹曲面。
% nrbcoons - 由4条NURBS曲线构造 Coons 双线性混合表面。
% nrbplot - 绘制 NURBS 曲线或曲面。% bspeval - 单变量 B 样条求值。
% bspderiv - 导数的 B 样条表示。
% bspkntins - 在单变量 B 样条中插入一个或多个节点。
% bspdegelev - 单变量 B 样条的度数提升。%下面的是里面带的,很简单,可用可不用% vecnorm - 向量规范化拼接。
% vecmag - 向量的内积开方。
% vecmag2 - 向量的内积。
% vecangle - 求对应向量分量的tan值(0 <= 角度 <= 2*pi)
% vecdot - 两个向量的点积。
% veccross - 两个向量的叉积。
% vecrotx - 围绕 x 轴的旋转矩阵。
% vecroty - 围绕 y 轴的旋转矩阵。
% vecrotz - 围绕 z 轴的旋转矩阵。
% vecscale - 缩放矩阵。
% vectrans - 平移矩阵。
%
% deg2rad - 将度数转换为弧度。
% rad2deg - 将弧度转换为度数。
  1. nrbmak - 从控制点和节点构建 NURBS。
nurbs = nrbmak(coefs,knots)
nrbmak - 给定控制点,构造 NURBS 结构和结。参数:
cntrl : 控制点,这些可以是笛卡尔或齐次坐标。对于曲线,控制点由大小为 (dim,nu) 的矩阵		表示,对于曲面,控制点由大小为 (dim,nu,nv) 		的多维数组表示。 其中 nu 是沿参数 U 方向		的点数,nv 是沿 V 方向的点数。 
Dim 是维度有效选项 2 .... (x,y) 二维笛卡尔坐标3 .... (x,y,z) 3D 笛卡尔坐标4 .... (wx,wy,wz,w) 4D齐次坐标knots : 非递减结序列,跨越区间[0.0,1.0]假设曲线和曲		面通过等于样条阶数的节点多重性被夹紧到		起点和终点控制点。  对于曲线A形成一个向		量,对于曲面A由U和V的两个向量存储在一		个单元结构中。{uknots vknots}nurbs : 用于表示 NURBS 曲线的数据结构。注意:控制点始终在 NURBS 结构中转换并存储为 		4D 齐次坐标。 一条曲线总是沿 U 方向存储,		vknots 元素是一个空矩阵。 对于曲面,样条		度数是一个向量 [du,dv],分别包含沿 U 和 V 方向的度数。
描述:这个函数是用来构建NURBS数据结构的一个常用函数。工具箱中的许多其他函数都依赖于	NURBS结构的正确定义。nrbmak 不仅构建了正确的结构,而且还检查了一致性。用户仍然可以自由地建立自己的结构,事实上工具箱中的函数就是为了方便而做的。
案例1构造一条从 (0.0,0.0) 到 (1.5,3.0) 的二维线。对于直线,需要 2 阶样条。 
请注意,结序列在开始 (0.0,0.0) 和结束 (1.0 1.0) 处的重数为 2,以便夹紧末端。
line = nrbmak([0.0 1.5; 0.0 3.0],[0.0 0.0 1.0 1.0]); 
nrbplot(line, 2);案例2
在 x-y 平面上构造一个曲面,
line = nrbmak([0.0 1.5; 0.0 3.0],[0.0 0.0 1.0 1.0]); 
nrbplot(line, 2);coefs = cat(3,[0 0; 0 1],[1 1; 0 1]); 
knots = {[0 0 1 1]  [0 0 1 1]} 
plane = nrbmak(coefs,knots); 
nrbplot(plane, [2 2]); 

在这里插入图片描述

在这里插入图片描述
3.nrbdegelev - 度数提升。

对于度数我一直没理解上去,仿佛只是控制点分化了,每个节点升一度多分化一个
可详间曲线度数提升章节
inurbs = nrbdegelev(nurbs, ntimes)
% nrbdegelev - 提高 NURBS 曲线或曲面的度数。
%
% 调用序列:
%
% ecrv = nrbdegelev(crv,utimes);
% esrf = nrbdegelev(srf,{utimes,vtimes});
%
% 参数:
%
% crv :NURBS 曲线,参见 nrbmak。
% srf :NURBS 曲面,参见 nrbmak。
% utimes : 增加沿 U 方向的度数。
% vtimes : 增加沿 V 方向 vtimes 的度数。
% ecrv :曲线的新 NURBS 结构,度数升高。
% esrf :度数升高的表面的新 NURBS 结构。
%
% 描述:
% degree 提升 NURBS 曲线或曲面。 
此函数使用 B-Spline 函数 bspdegelev,它与内部“C”例程接口。
%
% 例子:
%
% 沿 V 方向增加 NURBS 曲面两次。
% esrf = nrbdegelev(srf, 0, 1);
  1. nrbreverse - NURBS节点及核改为逆序并重构 。
crv = nrbtestcrv; 			%加载测试用的nurbs曲线
rcrv=nrbreverse(crv);		%反转

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 案例----构建直纹曲面
%如果一个曲面可以由一条直线通过连续运动构成,则可称其为直纹曲面。
%最常见的直纹曲面是平面、柱面和锥面。著名的莫比乌斯环也是直纹曲面。
%假如一个曲面上的任意一点均有两条不同的直线经过,
%那么称该曲面为双重直纹曲面。双曲抛物面和单叶双曲面即为双重直纹曲面的典型例子。
%对于曲面上每个点均有三条或更多的直线经过的曲面,可称为三重和多重直纹曲面。
%不过在三维欧几里得空间中,除了平面以外,不存在这样的直纹曲面。
hold on
title('由两条NURBS曲线构成的规则曲面.'); crv1 = nrbtestcrv; %构建一个简单的测试曲线。%                   nrbcirc - 构建一个nubrs圆弧。 vectrans-生成变换矩阵
%                      半径,中心,起始角度,结束角度       xyz的变化
crv2 = nrbtform(nrbcirc(4,[4.5;4],pi,0.0),vectrans([0.0 0 -4.0])); 
srf = nrbruled(crv1,crv2); %在两条线间构建直纹曲面
nrbplot(srf,[40 20]); %绘制nurbs曲线/曲面

在这里插入图片描述

  1. 案例----度数提升算法演示.
crv = nrbtestcrv; %加载测试曲线
% 绘制控制点 
plot(crv.coefs(1,:),crv.coefs(2,:),'bo') %画点
title('测试曲线度数提升1'); 
hold on; 
plot(crv.coefs(1,:),crv.coefs(2,:),'b--'); %连线% 绘制Nurbs曲线 
nrbplot(crv,48); % 度提升的曲线 by 1 
icrv = nrbdegelev(crv, 1); nrbplot(icrv,50)
% 插入新的结点并绘制新的控制点 
plot(icrv.coefs(1,:),icrv.coefs(2,:),'ro') %画点
plot(icrv.coefs(1,:),icrv.coefs(2,:),'r--'); %连线hold off;

提升1度
在这里插入图片描述
提升2度
在这里插入图片描述
提升3度
在这里插入图片描述
在升一度下再升2度、在升2度下再升一度、提升3度
其三者结果相同,结构体也一样,望留言解答。
在这里插入图片描述

nrbtestcrv函数


function crv = nrbtestcrv pnts = [0.1 1.5 4.5 3.0 7.5 6.0 8.5; 3.0 5.5 5.5 1.5 1.5 4.0 4.5; 0.0 0.0 0.0 0.0 0.0 0.0 0.0]; 
crv = nrbmak(pnts,[0 0 0 1/4 1/2 3/4 3/4 1 1 1]); 
  1. 案例----构建双线性混合的昆氏曲面
%昆氏曲面英文coons曲面,是基于四边形面片的一种曲面构造方法。
%首先要理解引导方向缀面数和截断方向缀面数的意思(相互垂直的方向)。
%从引导方向上顺延过去,有几个面,那么缀面数就是多少;截断方向缀面数也一样。
%譬如一个四面片,那么从任何一个方向的缀面数都是1。
%如果两个四面片相接,那么一个方向的缀面数是2,另外一个是1。
%如果是一个“田”字型的4个四边形面片组成的,那么引导和截断方向缀面数都是2。
%在连接的时候先连引导方向的线,每次都是一个四边形面片的一边,
%注意看提示。如果特殊的,譬如三角面片,那就把点重复。% 边界 曲线 1 
pnts = [ 0.0  3.0  4.5  6.5 8.0 10.0; 0.0  0.0  0.0  0.0 0.0  0.0;  2.0  2.0  7.0  4.0 7.0  9.0];    
crv1 = nrbmak(pnts, [0 0 0 1/3 0.5 2/3 1 1 1]); % 边界 曲线 2 
pnts= [ 0.0  3.0  5.0  8.0 10.0; 10.0 10.0 10.0 10.0 10.0; 3.0  5.0  8.0  6.0 10.0]; 
crv2 = nrbmak(pnts, [0 0 0 1/3 2/3 1 1 1]); % 边界 曲线 3 
pnts= [ 0.0 0.0 0.0 0.0; 0.0 3.0 8.0 10.0; 2.0 0.0 5.0 3.0]; 
crv3 = nrbmak(pnts, [0 0 0 0.5 1 1 1]); % 边界 曲线 4 
pnts= [ 10.0 10.0 10.0 10.0 10.0  ; 0.0   3.0  5.0  8.0 10.0  ; 9.0   7.0  7.0 10.0 10.0  ]; 
crv4 = nrbmak(pnts, [0 0 0 0.25 0.75   1 1 1]); srf = nrbcoons(crv1, crv2, crv3, crv4); %双线性混合昆氏曲面的构建% 绘制表面 
nrbplot(srf,[20 20]); 
title('双线性混合昆氏曲面的构建。'); 

在这里插入图片描述
8. 案例----多控制点的曲面生成

例子1
pnts(:,:,1) =[2 3 4 5 6 7;0 0 0 0 0 0;4 4 4 4 4 4];
pnts(:,:,2) =[2 3 4 5 6 7;1 1 1 1 1 1;4 4 4.1 4 4 4];
pnts(:,:,3) =[2 3 4 5 6 7;2 2 2 2 2 2;4 4 4 4.2 4 4];
pnts(:,:,4)= [2 3 4 5 6 7;3 3 3 3 3 3;4 4 4.3 4 4 4];
pnts(:,:,5)= [2 3 4 5 6 7;4 4 4 4 4 4;4 4 4.4 4 4 4];
knots{1} = [0 0  1/5 2/5 3/5 4/5  1 1]; %u
knots{2} = [0 0  1/4 2/4 3/4      1 1]; %v
plane = nrbmak(pnts,knots); 
nrbplot(plane, [50 50]); 

在这里插入图片描述

难点在于knots{1}与knots{2}
knots{1}是根据母线的核来写的,每一条都一样 即为u方向的核
knots{2}表达这些母线间的控制关系 即为v方向的核

再填充一条线后的核
pnts(:,:,6)= [2 3 4 5 6 7;5 5 5 5 5 5;4 4 4.7 4 4 4];knots{1} = [0 0  1/5 2/5 3/5 4/5   1 1]; 
knots{2} = [0 0  1/5 2/5 3/5 4/5   1 1]; 
或者
knots{1} = [0 0 0 1/4 2/4 3/4 1  1 1]; 
knots{2} = [0 0 0 1/4 2/4 3/4 1  1 1]; 

二重的效果
在这里插入图片描述
三重的效果
在这里插入图片描述
4重的效果

knots{1} = [0 0 0 0 1/3 2/3 1 1 1 1]; 
knots{2} = [0 0 0 0 1/3 2/3 1 1 1 1]; 

在这里插入图片描述

5重的效果

knots{1} = [0 0 0 0 0 1/2 1 1 1 1 1]; 
knots{2} = [0 0 0 0 0 1/2 1 1 1 1 1]; 

在这里插入图片描述

  1. 案例----坐标提取
%基于上个案例实现
hold on
pnts(:,:,1) =[2 3 4 5 6 7;0 0 0 0 0 0;4 4 4 4 4 4];
pnts(:,:,2) =[2 3 4 5 6 7;1 1 1 1 1 1;4 4 4.1 4 4 4];
pnts(:,:,3) =[2 3 4 5 6 7;2 2 2 2 2 2;4 4 4 4.2 4 4];
pnts(:,:,4)= [2 3 4 5 6 7;3 3 3 3 3 3;4 4 4.3 4 4 4];
pnts(:,:,5)= [2 3 4 5 6 7;4 4 4 4 4 4;4 4 4.4 4 4 4];
pnts(:,:,6)= [2 3 4 5 6 7;5 5 5 5 5 5;4 4 4.7 4 4 4];
knots{1} = [0 0 1/5 2/5 3/5 4/5  1 1]; 
knots{2} = [0 0 1/5 2/5 3/5 4/5  1 1]; 
plane = nrbmak(pnts,knots); 
nrbplot(plane, [20 20]); ut=linspace(0,1,50);%在0~1间等分50份
tt{1}=ut;
tt{2}=[0];
p=nrbeval(plane,tt); %带入求解公式得到对应点的坐标p
plot3(p(1,:),p(2,:),p(3,:),'ro') %画点
hold off 
nrbeval可有两种返回形式,[p,w] = nrbeval(crv,ut)--------曲线
[p,w] = nrbeval(srf,{ut,vt})---曲面
p = nrbeval(crv,ut)------------曲线
p = nrbeval(srf,{ut,vt})-------曲面
p 为NURBS 曲线/面上的点对应的笛卡尔坐标 (x,y,z)。
如果 w 包含在列表中,则点将作为齐次坐标 (wx,wy,wz) 返回。
w为权重

在这里插入图片描述
p大小为3*50
在这里插入图片描述

**ut与vt**这两组数据都在0~1之内,大小表达为该点占总长的比例再换算成坐标。
如案例所示,其范围坐标为2~7,
ut=0表示2
ut=1表示7
ut=0.5表示4.5
这个鬼东西(⊙﹏⊙)坑的一批,而且他只在二重情况为等分,其余情况不是等分

横坐标表示为第几个点,纵坐标表示对应返回的x坐标。线性为等分。
在这里插入图片描述

在这里插入图片描述
**加粗样式**
在这里插入图片描述
gnurbs 和 nrbplot
在命令行窗口直接输入gnurbs
在这里插入图片描述
会自动打开默认实例。

gnurbs与nbrplot参数相同
gnurbs(srf,[xu,xv])
srf   nurbs曲线/面
xu,xv  两个方向上用于渲染的分辨率

在这里插入图片描述


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

相关文章

Nurbs曲线详解

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

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

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

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

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

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

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

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

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

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

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

MySQL 增量备份与恢复

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

增量备份恢复

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

mysql实现增量备份

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

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

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

MySQL完全备份和增量备份

MySQL日治管理、数据库备份与恢复 备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等。而备份、恢复中&#xff0c;日志起到了很重要的作用 一、日志 MySQL的日志默认保存位置为 /usr/local/mysql/data 1.日志类型与作用 ①re…

MySQL 数据库备份(增量备份与恢复)

目录 一、MySQL 增量备份 1.增量备份的概念 1.1 为什么使用增量备份 1.2 增量备份的特点 2.增量备份示例 二、MySQL 增量恢复 1.增量恢复的场景 2.丢失完全备份之后更改的数据的恢复步骤 3.完全备份之后丢失所有数据的恢复步骤 4. 基于时间点与位置的恢复 4.1 基于时间…

mysql数据的备份与恢复

mysql数据的备份与恢复 日志的类型与作用&#xff1a;开启日志方式查看日志是否开启 数据备份的重要性&#xff1a;备份类型&#xff1a;如何选择逻辑备份策略或频率&#xff1f;常见的备份方法&#xff1a;MysQL完全备份优缺点&#xff1a;数据库完全备份分类&#xff1a; 实验…

完全备份 、差异备份、增量备份的区别和特点

数据备份的方式有完全备份、差异备份以及增量备份&#xff0c;那么这三种备份方式有什么区别&#xff0c;在具体应用中又该如何选择呢&#xff1f;本文就这些问题作以介绍。 一、备份方式简介 1、完全备份&#xff08;Full Backup&#xff09; 备份全部选中的文件夹&#xf…

MySQL 数据库备份(二)(增量备份与恢复)

文章目录 一、MySQL 增量备份1.增量备份的概念1.1 为什么使用增量备份1.2 增量备份的特点 2.增量备份示例 二、MySQL 增量恢复1.增量恢复的场景2.丢失完全备份之后更改的数据的恢复步骤3.完全备份之后丢失所有数据的恢复步骤4. 基于时间点与位置的恢复4.1 基于时间点的恢复4.1 …

增量备份

增量备份&#xff0c;是指在完整备份的基础上&#xff0c;每次只是备份自上次备份以来被修改过的数据块。增量备份策略不能用于映像备份&#xff0c;因为映像备份总是对于所有的数据文件。增量备份可以是数据库、数据文件和表空间三个级别。 一、增量备份的种类 第一、累积增…

PC端微信打不开小程序解决

PC端微信点击小程序之后没有啥反应&#xff0c;可以使用下面的方法解决&#xff1a;右键桌面的微信快捷方式&#xff0c;属性-兼容性&#xff0c;勾选上以兼容模式运行这个程序即可

微信外部链接无法使用浏览器打开 微信链接打不开的解决方案

域名在微信中打不开&#xff0c;有诸多问题 1、硬件原因&#xff0c;比如手机网络、手机缓存的手机硬件设备等 这里就不讨论硬件方便的问题 2、其他原因 目前的APP基本都支持二维码扫描下载&#xff0c;二维码下载也成为了大家用起来很顺手的一种方式。由于微信的用户基本占据…

微信中已停止访问该网页、据用户投诉及腾讯手机管家云网址检测、该网页包含不安全内容。为维护绿色上网环境,已停止访问的解决方案

不管是网站的首页&#xff0c;还是产品的页面地址&#xff0c;以及在线支付的地址&#xff0c;都有可能会被微信提示&#xff1a;已停止访问该网页&#xff0c;据用户投诉及腾讯网址安全中心检测&#xff0c;该网页包含违法或违规内容。为维护绿色上网环境,已停止访问。有的页面…

微信内置浏览器打不开链接怎么办,实现微信跳转链接

在我们使用微信营销的时候,很容易碰到推广连接在微信内无法打开或无法下载app的情况。通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下三点 1、网页链接被举报次数过多。2、网页含违规内容,含敏感词。3、被腾讯检测系统判断为…