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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中hdfs命令_linux下adb配置

    linux中hdfs命令_linux下adb配置Linux下的HDFS命令1.hdfs常用操作的命令格式  hadoopfs-ls对hdfs下一级目录的查看  hadoopfs-lsr对hdfs目录的递归查看  hadoopfs-mkdir创建目录  hadoopfs-put从linux上传文件到hdfs  hadoopfs-get从hdfs下载文件到linux  hadoopfs-text查看文件内容  hadoopfs-rm删除文件  hadoopfs-rm

    2022年10月5日
  • Redis在SpringBoot的基本使用

    Redis在SpringBoot的基本使用一、配置1.添加依赖在springboot启动器中直接添加依赖,或者创建后添加Maven依赖:<!–spring-boot-starter-data-redis–>&l

    2022年8月16日
  • Android应用开发揭秘2

    Android应用开发揭秘2Android应用开发揭秘2

    2022年6月11日
  • THINKPHP AJAX实例代码「建议收藏」

    THINKPHP AJAX实例代码「建议收藏」HTML文件: $(function(){ $(“#filename”).blur(function(){ varvalue=$(this).val(); $.ajax({ type:”GET”, url:”__URL__/ajax_check/name/”+value, dataType:”text”, success:fun

    2022年8月16日
  • 天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]

    天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]天气太冷不想出被窝?来DIY一个离线语音控制器点击上方“Embeded小飞哥”,选择“置顶/星标公众号”干货福利,第一时间送达!成就一番伟业的唯一途径就是热爱自己的事业。如果你还没能找到让自己热爱的事业,继续寻找,不要放弃。跟随自己的心,总有一天你会找到的。——乔布斯  你去关灯,你去,你去,。。我去。。小伙伴们有没有在天气寒冷时候,想去关灯,却离不开心爱的被窝的经历呢,有的话,跟着小飞哥一起来DIY一个离线语音控制器,有了它,我们

    2022年6月23日
  • unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…[通俗易懂]

    unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…[通俗易懂]参考链接:【解析】UnboundLocalError:localvariable’xxx’referencedbeforeassignment在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:主要是因为没有让解释器清楚变量是全局变量还是局部变量。【案例】如下代码片所示:deftest():ifvalue==1:a+=1returnavalue=…

    2022年6月24日

发表回复

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

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