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样条曲线示例(可以通过移动控制点观察曲线的变化)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 博客帮助文档

    博客帮助文档博客积分规则博客等级C币规则(试运营)博客VIP说明(试运营)博客专家如何成为博客专家企业博客如何开通企业博客博客勋章分类专栏博客搬家自定义百度统计CSDN博客用户准则Markdown帮助博客积分规则博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。积分规则具体如下:1、每发布一篇…

  • XMPP得知--建立一个管理类

    XMPP得知--建立一个管理类

  • java基础-云服务器购买

    java基础-云服务器购买小伙伴们,你们好呀!我是老寇!3年前,在阿里云买了我人生中的第一台云服务器,二话没说直接下单,看着支付宝的余额,我心如刀绞。所幸的是我熬过了这一个月。接下来我们进入正题(以阿里云为例)!目录一、操作步骤一、操作步骤1.输入阿里云网址,点击账号登录2.扫码登录->强烈建议下个阿里云APP,这样每次登陆只需要扫一扫就可以3.点击控制台,进入控制台4.完成实名认证(略)5.点击最新活动,找到开发者成长计划6.认准ECS服务器7.买Cento

  • js 修改全局变量

    js 修改全局变量一般在方法里对全局变量的修改仅限于方法体内,方法结束之后,全局变量就会恢复之前的值,在前端的js代码里,可以通过使用ajax来修改全局变量的值:其中async:false是把ajax从异步改为同步,这样就可以实现在方法里实现对全局变量的修改。<scripttype=”text/javascript”>varn=1;functionchangen(){$.ajax({async:false,

  • vps自建_七牛云搭建图床

    vps自建_七牛云搭建图床目的:将一些小服务应用部署到免费的serverless/VPS上去环境:0成本实现方式:github+vercel/freewha效果:项目一:个人导航项目二:个人博客项目三:个人音乐服务器:背景:上面的项目以前我都是部署在家里群晖上,或者VPS上,但是FRPC和VPS的流量,延时、运维更新等问题,实际用起来很繁琐,最近两年serverless发展很火,于是就萌生了把他们部署到免费的VPS或者serverless产品上网络上有很多hexo博客部署到vercel、github.

  • ps中旋转复制_ps为什么旋转复制不了

    ps中旋转复制_ps为什么旋转复制不了步骤:1.画一个圆形,确定圆的中心点;2.画一个小矩形用黑色箭头(路径选择工具)选中小矩形–Ctrl+Alt+T(选中并复制)–按住Alt键在圆形中心单击(确定旋转的中心点)在工具栏中输入

发表回复

您的电子邮箱地址不会被公开。

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