B样条曲线的一些基本性质[通俗易懂]

B样条曲线的一些基本性质[通俗易懂]1.B样条曲线的节点(knotpoint)指的是将区间划分为一段一段的分段点。节点向量(knotvector)则是由多个节点组成的向量。2.B样条曲线的次数(degree)也就是基函数的次数,而阶数(oder)则是次数加1。3.若B样条曲线由n+1个控制点(从P0到Pn),有m+1个节点(从u0到um),阶数为k+1(次数为k),则必须满足m=n+k+1。4.B样条曲线的每个控制点对应一个基函数,所有控制点与对应的基函数的乘积求和可得到B样条曲线的函数表达式。5.B样条曲线具有局部支撑性。第i+

大家好,又见面了,我是你们的朋友全栈君。

1.B样条曲线的节点(knot)指的是将区间划分为一段一段的分段点。节点向量(knot vector)则是由多个节点组成的向量,代表着对于这个B样条曲线是如何进行分段的。节节点(knot point)则是区间分段点所对应的B样条曲线上的曲线分段点。

2.B样条曲线的次数(degree)也就是基函数的次数,而阶数(oder)则是次数加1。基函数的次数就是多项式中x的最高的次数。

3.若B样条曲线由n+1个控制点(从P0到Pn),有m+1个节点(从u0到um),阶数为p+1(次数为p),则必须满足m=n+p+1。不同的文献中具体的符号表示不同,但是从本质上来说就是控制点的个数加上曲线的次数再加上1等于节点的个数
1
4.B样条曲线的每个控制点对应一个基函数,所有控制点与对应的基函数的乘积求和可得到B样条曲线的函数表达式。基函数是通过下面两个式子递推而来的(也就是说高次的基函数其实归根结底都是由0次的基函数乘上一些系数组成的,这也决定了在某些区间内,基函数始终为0):
2
在计算时可采用下面的三角形来辅助理解:
3
5.B样条曲线具有局部支撑性

第i+1个控制点Pi只影响区间(ui,ui+p+1)之间的曲线(p是基函数的次数)。这一点可以根据下面的三角图来理解:
4
上图中的N1,3代表序号为1的控制点所对应的基函数,层层分解之后,可以知道其在[u1, u2), [u2, u3), [u3, u4) 和[u4, u5)上是非零的,也就是它在[u1, u5)上非零。而N1,3基函数在其他区间上取值都为0,也就是说无论N1,3基函数对应的控制点怎么取值,都对别的区间内的曲线没有影响(所以说B样条可以进行局部调整)。

总结一下就是:基函数 Ni,p(u) 在[ui, ui+p+1)上非零。或,相等地,Ni,p(u) 在 p+1个节点区间[ui, ui+1), [ui+1, ui+2), …, [ui+p, ui+p+1)上非零。

那么,反过来看如果我观察一个区间的话,这个区间内的曲线会受哪些基函数的影响呢?

类似地,可以通过下面的三角图去理解:
5
所有的高次基函数本质上都是由第一列的非0即1的0次基函数所组成的。对于区间 [u3, u4)来说,所有不在蓝色三角形内的别的高次基函数拆解为0次的基函数后,在 [u3, u4)上均为0,对该区间上的曲线没有任何的影响。所以,对该区间的曲线有影响的就只有三角形内的基函数了。

总结一下就是:在任何一个节点区间 [ui, ui+1), 最多有 p+1个p 次基函数非零,即:Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), …, Ni-1,p(u) 和 Ni,p(u)。(且这些基函数的累加和为1)

6.强制第一个节点和最后一个节点的重复度为p+1,那么产生的曲线就会分别与第一个控制点和最后一个控制点的第一边和最后一边相切,且曲线会经过第一个控制点和最后一个控制点。也就是所谓的clamped B样条曲线。
6
7.凸包性。样条曲线包含在控制折线(ployline)的凸包内。更特别地,如果u 在节点区间[ui,ui+1)里,那么C(u)在控制点Pi-p, Pi-p+1, …, Pi的凸包里。
7
点击即可打开链接:B样条曲线示例(可以通过移动控制点观察曲线的变化)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150385.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • offsetheight和clientheight_scrollheight属性

    offsetheight和clientheight_scrollheight属性介绍网上介绍clientheight、offsetheight、scrollheight的帖子很多,看后感觉明白了,一细想似乎又不明白了。为了获取更权威的解答,查阅了MDN文档,希望能帮助后来人。为了加深理解,看后,最好做下后边的实验。clientheightclientheight,内容的可视区域,不包含border。clientheight=padding+height-横向滚动轴高度。

    2022年9月4日
    2
  • 缓存穿透、缓存击穿、缓存雪崩的理解和解决方案[通俗易懂]

    缓存穿透、缓存击穿、缓存雪崩的理解和解决方案[通俗易懂]目录一、缓存穿透二、缓存击穿三:缓存雪崩在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低一、缓存穿透1、缓存穿透理解缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去了缓存保护后端持久的意义。缓存穿透示意图:缓存穿透问…

    2022年6月20日
    38
  • IntelliJ IDEA 2022 JetbrainsIdesCrack 激活码【2022免费激活】

    (IntelliJ IDEA 2022 JetbrainsIdesCrack 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~HC…

    2022年4月1日
    461
  • 2019版idea激活码破解方法

    2019版idea激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    282
  • nmap命令教程详解

    nmap命令教程详解-sP:ping扫描(不进行端口扫描)-sT:进行TCP全连接扫描-sS:进行SYN半连接扫描-sF:进行FIN扫描-sN:进行Null扫描-sX:进行Xmas扫描-O:进行测探目标主机版本(不是很准)-sV:可以显示服务的详细版本-A:全面扫描-p:指定端口扫描-oN:会将扫描出来的结果保存成一个txt文件-oX:会将扫描出来的结果保存成一个xml文件[-T1]-[-T5]:提高扫描速度.详细分析1)、主机发现nmap-sP192.168.1

    2022年5月28日
    43
  • Android—Gradle教程(九)完结篇

    Android—Gradle教程(九)完结篇前言到目前为止,Gradle基础以及Kotlin基础讲解完毕。因此,在本篇里,将会以Gradle的构建优化以及如何从Groovy迁移到KTS进行详解!话不多说,直接开始!1、Gradle构建优化优化都是些配置,快速过一下就行了!重点在迁移KTS1.1并行编译开启默认情况下Gradle处理多模块时,往往是挨个按顺序处理。在项目根目录下面的gradle.properties中设置开启并行编译,提升编译速度:org.gradle.parallel=true1.2开启编译守护进程(默认开启)

    2022年6月28日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号