计算机图形学-样条曲线Spline

article/2025/9/29 5:54:06

内容来自《计算机图形学》第四版 第14章-样条表示


目录

  • [1] 样条的种类
    • 1. 插值样条
    • 2. 逼近样条
  • [2] 参数连续性条件
  • [2] 几何连续性条件
  • [3] 样条描述
    • 1. 列出一组施加在样条上的边界条件
    • 2. 列出描述样条特征的行列式
    • 3. 列出一组混合函数或基函数
  • [4] 三次样条插值方法
    • 1. 自然三次样条 Natural Cubic Spline
    • 2. Hermite 插值
    • 3. Cardinal 样条
    • 4. Kochanek-Bartels 样条



  • 样条:通过一组指定点集生成平滑曲线的柔型带
  • 样条曲线:计算机图形学中,样条曲线指多项式曲线段连接而成的曲线

[1] 样条的种类

给定一组控制点,可以生成一条样条曲线,这些点给出了曲线的大致形状。根据这些控制点位置,可以使用以下两种方法之一选取分段连续参数多项式函数。

1. 插值样条

当选取的多项式使得曲线通过每个控制点,则所得曲线称为该组控制点的插值(interpolate)样条曲线。插值曲线常用于数字化绘图或指定路径

方法包括:

  • 自然三次样条
  • Hermite 插值
  • Cardinal 样条
  • Kochanek-Bartels 样条

在这里插入图片描述


2. 逼近样条

另一情况,当选取的多项式使部分或全部控制点不在生成的曲线上,则所得曲线称为该组控制点的逼近(approximate)样条曲线。逼近曲线一般作为设计工具来构造对象形体。
在这里插入图片描述
方法包括

  • Bezier曲线
  • B样条
  • Beta样条
  • 有理样条


[2] 参数连续性条件

为保证分段参数曲线从一段到另一段连续过渡,可以在连接点处要求各种连续性条件(continuity conditions),如样条的每一部分以参数方程描述:

x = x ( u ) , y = y ( u ) , z = z ( u ) , u ∈ [ u 1 , u 2 ] x=x(u), y=y(u), z=z(u), u∈[u_1,u_2] x=x(u),y=y(u),z=z(u),u[u1,u2]

则通过曲线段公共部分匹配连接的参数导数,从而建立参数连续性(parametric continuity)。

0阶参数连续性 C 0 C^0 C0 简单地表示曲线相连;

一阶参数连续性 C 1 C^1 C1 说明代表两条相邻曲线段的方程在相交点处有相同的一阶导数:如连接点 u 0 u_0 u0两侧曲线的参数方程分别为 x 1 ( u ) , y 1 ( u ) x_1(u), y_1(u) x1(u),y1(u) x 2 ( u ) , y 2 ( u ) x_2(u), y_2(u) x2(u),y2(u),那么 x 1 ′ ( u ) = x 2 ′ ( u ) x_1'(u)=x_2'(u) x1(u)=x2(u) y 1 ′ ( u ) = y 2 ′ ( u ) y_1'(u)=y_2'(u) y1(u)=y2(u)时达到一阶参数连续性,其中’表示对参数 u u u求导。

二阶参数连续性 C 2 C^2 C2 同理,表示交点处切向量的变化率相等。
在这里插入图片描述



[2] 几何连续性条件

0阶几何连续性 G 0 G^0 G0 和一阶参数连续性 C 0 C^0 C0含义相同,表示曲线相连;

一阶几何连续性 G 1 G^1 G1 说明代表两条相邻曲线段的方程在相交点处的参数导数成比例:如连接点 u 0 u_0 u0两侧曲线的参数方程分别为 x 1 ( u ) , y 1 ( u ) x_1(u), y_1(u) x1(u),y1(u) x 2 ( u ) , y 2 ( u ) x_2(u), y_2(u) x2(u),y2(u),那么 x 1 ′ ( u ) / y 1 ′ ( u ) = x 2 ′ ( u ) / y 2 ′ ( u ) x_1'(u)/y_1'(u)=x_2'(u)/y_2'(u) x1(u)/y1(u)=x2(u)/y2(u)时达到一阶几何连续性,其中’表示对参数 u u u求导。实际上,即不用参数表达曲线时,曲线写成 y = f ( x ) y=f(x) y=f(x),交点两侧曲线y对x导数相等。

二阶几何连续性 G 2 G^2 G2 同理。



[3] 样条描述

以三次样条为例,有以下三种等价描述:

1. 列出一组施加在样条上的边界条件

列出参数表达式,以x为例:
在这里插入图片描述
曲线的边界条件可以设为端点坐标 x ( 0 ) x(0) x(0) x ( 1 ) x(1) x(1)及端点处的一次导数 x ′ ( 0 ) x'(0) x(0) x ′ ( 1 ) x'(1) x(1),这四个边界条件即可充分确定四个系数。


2. 列出描述样条特征的行列式

将上述参数方程重写为矩阵型
在这里插入图片描述
U是参数u的幂次行矩阵,C是系数列矩阵。C可通过边界条件解方程求得:
在这里插入图片描述
M g e o m M_{geom} Mgeom是包含样条上几何约束值(边界条件,包括控制点坐标值和其他已指定的几何约束)的四元素列矩阵, M s p l i n e M_{spline} Mspline将几何约束值转化称多项式系数。从而可以得到
在这里插入图片描述
M s p l i n e M_{spline} Mspline描述了一个样条表示,称为基本矩阵。


3. 列出一组混合函数或基函数

最后,通过特征方程,可以得到关于坐标x的几何约束参数多项式表示:
在这里插入图片描述
g k g_k gk是约束参数,类似控制点坐标和控制点处的曲线斜率, B F k BF_k BFk是混合函数或称为基函数。



[4] 三次样条插值方法

1. 自然三次样条 Natural Cubic Spline

在使用公式表示一个自然三次样条时,需要两个相邻曲线段正在公共边界处有相同的一阶和二阶导数,即自然三次样条具有 C 2 C^2 C2连续性。

在这里插入图片描述
如图,以参数方程 x ( u ) x(u) x(u)为例,有n+1个控制点,n段曲线,每段曲线4个系数,共有4n个多项式系数待定

分析约束数量:除去首末控制点,共n-1个内部控制点,每个内部控制点需要满足四个约束,包括左右两端曲线经过该控制点、左右两端对参数一阶导数和二阶导数相等。这样出现4n-4个约束。 对于首末控制点,各有一个位置约束,则共有4n-2个约束。还需两个约束条件,这时有两种解决方案:

  • 指定首末控制点处二阶导数=0
  • 增加两个隐含控制点,分别位于原首末控制点的外侧。这时,所有控制点都成为内部控制点,即满足4n个约束条件。

自然三次样条的主要缺陷 若控制点中的任意一个发生了变动,则整条曲线都要受到影响,即不支持“局部控制”。

2. Hermite 插值

指定每个曲线段的控制点的位置和一阶导数,那么对每个内部控制点,有4个约束:两侧曲线经过该控制点、两侧曲线导数等于给定值;对于首末控制点,各有2个约束,分别是位置约束和导数约束。那么共计4(n-1)+2*2 = 4n个约束。

这样,Hermite样条支持局部调整,因为每个曲线段仅依赖其端点的约束。

记每一段曲线的约束为端点 p k , p k + 1 p_k, p_{k+1} pk,pk+1和端点斜率 D p k , D p k + 1 Dp_k, Dp_{k+1} Dpk,Dpk+1,则参考[3]-2,可以通过约束计算系数,带入曲线表达式可得:

在这里插入图片描述
实际上,在这里,H即为基函数,也成为混合函数。
在这里插入图片描述

但是,除了控制点坐标之外,更好的处理方法是不需要处理输入曲线的斜率或其它几何信息即能生成样条曲线,Cardinal 样条和Kochanek-Bartels 样条可以满足这样的要求。


3. Cardinal 样条

在Cardinal样条中,一个控制点的一阶导数值可以由两个相邻控制点的坐标进行计算。

一个Cardinal样条完全由四个连续控制点给出,中间两个控制点是曲线端点,另外两个点用于计算端点斜率。

在这里插入图片描述
控制点 p k p_k pk p k + 1 p_{k+1} pk+1处的一阶导数和弦 p k − 1 p k + 1 p_{k-1}p_{k+1} pk1pk+1 p k p k + 2 p_{k}p_{k+2} pkpk+2成正比。参数t称为张量(tension)参数,控制样条与输入控制点之间的松紧程度。当t=0时,这样的曲线称为Catmull-Rom样条或Overhauser样条。
在这里插入图片描述

4. Kochanek-Bartels 样条

Kochanek-Bartels 样条是Cardinal样条的扩展,将两个附加参数引入到约束方程中,从而为调整曲线形状提供更多方便。

在这里插入图片描述
t是张量参数,b是偏离参数,c为连续性参数。

即通过其他控制点控制某控制点的导数的方式更复杂一些,可以产生更多控制效果。

在这里插入图片描述


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

相关文章

样条曲线(spline)

文章目录 样条(spline)是什么?样条曲线的定义样条曲线的分类B-splineDefinitionPropertyB-spline vs. Bzier curveHow can we prove that a Bezier curve is a specific case of a B-spline curve by the definition of B-splines? Bzier sp…

样条曲线

基本概念 在计算机图形中,样条曲线(spline curve)指由多项式曲线段连接而成的曲线,在每段的边界处满足特定的连续性条件。样条曲面(spline surface)可以使用两组样条曲线进行描述。 给定一组称为控…

布丁压缩注册表删除路径

被布丁压缩的弹窗广告烦了好几天,卸载了好几次又自动安装了,今天终于忍无可忍,所以今天必须得跟它say Byebye! winR快捷键,输入regedit,打开注册表 路径在这里 找注册表里的文件删除就ok 保险起见 在C:\Pr…

用注册表修改右键菜单

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 一: 开始,运行里面…

VMware卸载重装产生的注册表问题

http://www.xitongcheng.com/jiaocheng/dnrj_article_58655.htmlTOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 …

关于电脑注册表regedit自定义管理右键菜单选项实例(删除增加)

前言:删除电脑多余右键菜单的具体操作 所有关于电脑的操作都可以通过修改注册表来实现。而随着电脑软件的安装,本就为方便人们操作的右键菜单变的愈来愈臃肿。但我们可以自定义管理大多数右键菜单,这篇帖子就是为了解决这些问题 右键菜单管…

XP注册表文件存放位置

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! XP注册表文件存放位置%system%/system32/config目录下有这样一些文件sam.* Securi…

QTP操作注册表

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 在QTP中没有提供用于直接操作注册表的测试…

组策略对应注册表位置部分解读

一、概要 在域环境中,管理员经常要执行的操作就是编辑应用域策略,对域环境中成员主机进行集中管理,但是有时候会存在这样的问题,某项策略配置应用生效后,导致了域成员主机部分功能异常,但是直接撤销域策略…

“office安装过程错误,显示注册表某路径没有权限”解决办法

文章转自https://blog.csdn.net/super_star666/article/details/79962129 博主在安装office过程,因为重复卸载后,再安装就出现了问题。从网上搜了很多解决办法都无法实现。只有这种办法解决了问题。首先在这里感谢一下原作者,让我不至于再浪费…

梳理注册表的一些危险操作,注册表的安全配置,以及对于注册表的总结

本次文章为大家梳理一些注册表常见的危险操作,希望可以帮大家规避一些在日常使用中可能会遇到的问题。 映象劫持IFEO(Image File Execution Options) 在低版本的windows中,我们可以简单地替换程序,但是在高版本的win…

「事件驱动架构」Kafka中的模式注册表和模式演化

在这篇文章中,我们将通过Kafka模式注册表来研究Kafka中的模式演化和兼容性类型。通过对兼容性类型的良好理解,我们可以安全地随着时间的推移对模式进行更改,而不会无意中破坏生产者或消费者的利益。 数据集 在我们的“真实世界中的Hadoop开发…

IObit Uninstaller(电脑软件彻底卸载, 包含注册表) 彻底解决软件卸载不干净的问题

本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 或直接查看本专栏其他文章, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理 本文可以转载&…

Windows注册表及常见子项

Windows注册表五大根键以及常用注册表项 注册表概述:注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”,也可以说是一个非常巨大的树状分层结构的数据库系统。注册表记录了用户安装在计算机上的软件和每个程序…

注册表权限修改

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

webx框架解析

2019独角兽企业重金招聘Python工程师标准>>> WebX框架是阿里巴巴集团开发的,它建立在SpringEx的基础上,具有超强的扩展能力。 一、Webx的层次结构(从里到外) (1)SpringExt:基于Sprin…

Webx mvc 源码

Webx命名规范 Web请求响应 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两件事: 首先,它会增强request、response、session的功能,并把它们打包成更易使用的RequestContext对象。 其次,它会调用相应子应用的pipeline,用它来做进一步的处理。 假如在…

WebX源码研读

WebX是公司应用最为广泛的web框架,目前已经开源。一直以为webX是基于spring MVC的,但其实并不是,那么不同之处到底在何处,又是为什么这样实现?看过了源码,在这里梳理下思路 我以为,在业务层面上…

WebX框架使用说明

前言 标准MVC开源框架有很多(Struts、SpringMVC、Webx),对于生活在开源世界里面的码农来说SpringMVC、Struts是接触比较多,也是最熟悉的框架。 知己知彼 以配置SpringMVC为例,我们常常关注的点主要有以下几个方面&a…

webx学习总结

webx学习总结 一 Webx的概括 WEBX是阿里巴巴的部框架,“就是把页面与Service之间的一些Servlet等公共的东西抽象出,提供相的服务以提高发效率(《接口之Webx介》—何晓峰 )”,可以看出,webx和统的servlet-ac…