理解Nurbs曲线/曲面的参数空间

article/2025/8/21 9:21:40

人们对计算几何最常见的误解之一与曲线参数有关。

由于 Nurbs 曲线的数学相当复杂——其中大部分肯定超出了高中水平——很难解释控制点坐标、控制点权重、曲线度数和结向量如何共同使 nurbs 曲线的参数化变得复杂。 我自己对 Nurbs 数学的掌握充其量是皮毛,所以我认为如果我使用更简单的曲线类型开始这个讨论,对每个参与的人都会更好。

在这里插入图片描述

推荐:用 NSDT场景设计器 快速搭建3D场景。

但在我们开始讨论这个问题之前,我们应该首先为什么样的形状符合“曲线”的条件制定一些基本规则:

  • 曲线是有限的一维对象,存在于具有任意维数的某个空间中。 在这篇博文中,我将只关注我们都熟悉的二维和三维空间。
  • 每条曲线必须恰好有两个端点。 不多也不少。
  • 如果端点重合,则认为曲线闭合。
  • 曲线内部不能有间隙,因为这会产生两个以上的端点。
  • 曲线上不能有分支点,除非端点与曲线的某个内部点重合。

基本上,将所有可能的曲线想象成橡皮糖,你可以拉伸、弯曲、扭曲和扭结它们,但最终它只不过是一堆变形应用于一块直的耐嚼的粘液。 请注意,上面的定义不同于曲线的常见数学定义。 数学家往往更具包容性和严谨性。

由于所有曲线都有两个端点(我们称它们为起点和终点)我们也可以说曲线存在于一个数值区间(interval)或域(domain)内。 该域将包含两个端点之间的所有数字,包括两个端点 :

在这里插入图片描述

上图显示了域为 [0.0, 1.0] 的二维曲线。 0.0代表曲线的起点,1.0代表终点,0.0和1.0之间的每个数字代表曲线内部的某个点。 我选择了0.0和1.0,因为它们是整齐的数字,但每个具有非零长度的域在技术上都是有效的。 它可能是 [-π, +π] 或 [1000000.0, 1000000.1]。

让人困惑的第一件事是曲线的域与曲线的长度几乎没有关系。 你可以在不影响曲线的形状或大小的情况下更改域,并且可以在不影响域的情况下更改形状。 更糟糕的是,属于域某些部分的曲线量与该子域的大小几乎没有关系。 你可以在上图中看到,[0.25, 0.5] 子域中的曲线明显多于 [0.0, 0.25] 子域中的曲线。

那么什么是曲线参数以及曲线参数化的确切含义是什么? 每条数学曲线都由一些函数集合定义。 你可能非常熟悉的一个非常著名的函数是正弦函数,当绘制图形时,它会产生正弦波。 由于这是一条二维曲线,我们需要两个函数来描述它:

  • x = t
  • y = Sin(t)

第一个方程告诉我们曲线如何沿 X 轴运动,第二个方程定义了沿 Y 轴的行为。 这里的变量 t 称为参数。 曲线参数化是我们用来描述曲线参数属性的词,与几何属性相对。 参数化包括域和参数密度等内容,它定义了曲线任何部分的“速度”。 如果莫仍然认为曲线是有弹性的橡皮糖,那么曲线的“速度”就类似于橡皮糖的厚度。 曲线拉伸得越多,橡皮糖变得越稀薄,曲线速度就越高。

如果你想知道这条曲线在任何给定参数 t 的位置,你所要做的就是评估这两个函数并且你知道 t 处的坐标。 如果你想知道这条曲线在相同参数下的切向量,你计算的不是方程本身,而是它们的一阶导数,如果你想知道曲率,你可以使用二阶导数等等 。

如果我们求解这些方程以获得等间距 t 参数的集合,我们会得到如下结果:
在这里插入图片描述

所有红点之间的水平距离相同,但垂直距离随正弦波而变化。 因此,两个相邻点之间的实际距离一直在变化。 当曲线以最大速度向上运动时,它可以高达 0.28,而当曲线在顶部变平时,它可以低至 0.13。 这是参数“密度”如何在曲线的不同部分变化的主要示例。

由于我们定义上述曲线的方式(使用正弦函数),在特定参数下对其进行评估非常简单快捷。 然而,以给定的长度对其进行评估非常困难且耗时。 找出哪个参数代表曲线上距离起点恰好 x 个单位的点所需的数学步骤数量是惊人的。 这就是为什么实际上 Rhino 和 Grasshopper 中的所有曲线方法都需要参数而不是长度。

因此,让我们看一下参数沿 Nurbs 曲线的进展,以了解它们在更复杂的几何类型中的行为方式。 看一下具有 3 个等距共线控制点的度数 = 2 的 nurbs 曲线:
在这里插入图片描述

实际上看起来参数密度沿着这条曲线是恒定的。 这是因为控制点的完全对称性,任何会导致参数在一个地方拉伸的效果都会被相等且相反的效果所抵消。 但是,不要认为每条具有等距控制点的线性 nurbs 曲线都是如此整洁。 引入任何额外的复杂性和获得一致的参数密度将很难实现。 我们可以看到当我们将中间点从中心移开时会发生什么:
在这里插入图片描述

这导致曲线两端的平滑拉伸和压缩。 眼前的曲线形状和之前一模一样,只是不再是同一条曲线。 控制点的位置不是决定参数密度的唯一因素。 结向量(我们不会在这里讨论)和控制点权重也起着重要作用。 例如,此处中点的权重为 10.0,而端点的权重为 1.0:

在这里插入图片描述

如果你要沿着这条曲线的长度随机选择一个点,你很可能会在相对笔直的地方。 但是,如果你选择一个随机参数,那么很可能会在急转弯的某个地方结束。 因此,根据你的迎角,这条曲线会显得非常弯曲或非常直。 当处理更高阶的 nurbs 曲线(degree=3 和 degree=5 非常流行)时,即使没有任何加权,也往往会在曲线末端附近出现明显的参数拉伸 。

那么既然我们已经讨论了正弦波曲线和 Nurbs 曲线,那么更简单的类型如直线、折线、圆和弧呢? 对于这些类型的曲线,实际上很容易以参数密度恒定的方式定义它们。 当以相等的 t 间隔对弧进行采样时,步长将保持不变。 不仅距离是恒定的,一阶、二阶、三阶等的导数也是完美无缺的:
在这里插入图片描述

然而,将此弧线转换为 Nurbs 等价物(例如,通过在 Rhino 中打开控制点),所有美丽都会崩溃。 和以前一样,Nurbs 曲线的形状与圆弧的形状相同,但由于参数密度现在是可变的,导数也变得松散了:

所以,总结一下:

  • 不要混淆曲线参数和曲线长度。
  • 不要假设曲线的域必须有一个特定的值,它几乎可以是任何东西。
  • 不要认为以相等的步长穿过曲线域意味着你也在以恒定速度沿着曲线移动。
  • 具有相同形状的曲线可以具有截然不同的参数化。

原文链接:Nurbs参数空间 — BimAnt


http://chatgpt.dhexx.cn/article/1EKTc6Fl.shtml

相关文章

Bezier曲线、B样条和NURBS的基本概念

最不能理解的一点,一讨论软件的曲面,曲线功能,最后就变成曲线、曲面的数学原理的讨论了,但是里面也没数学好的,讨论的结果可想而知。 我不是数学家,我不懂这么复杂的方程,只要好用就行了。 在CA…

NURBS曲线 和 NURBS曲面

NURBS曲线 NURBS曲线(非均匀有理B样条)是由分段有理B样条多项式基函数定义的,k阶NURBS曲线的定义如下: P ( t ) ∑ i 0 n w i P i N i , k ( t ) ∑ i 0 n w i N i , k ( t ) ∑ i 0 n P i R i , k ( t ) P(t)\frac{\sum_{i…

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

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

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. 指定企业备份策略的思路 总结 引言 完全备份…