B样条基函数

​定义:令U={u0,u1,…,um}是一个单调不减的实数序列,即ui≤ui+1,i=0,1,…,m-1。其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p+1阶)B样条基函数,其定义为

由此可知:

(1)Ni,0(u)是一个阶梯函数,它在半开区间u∈[ui,ui+1)外都为零;

(2)当p>0时,Ni,p(u)是两个p-1次基函数的线性组合;

(3)计算一组基函数时需要事先制定节点矢量U和次数p;

(4)定义式中可能出现0/0,我们规定0/0=0;

(5)Ni,p(u)是定义在整个实数轴上的分段多项式函数,但我们一般只对它在区间[u0,um]上的部分感兴趣;

(6)半开区间[ui,ui+1)称为第i个节点区间(knot span),它的长度可以为零,因为相邻节点可以是相同的;

(7)计算p次基函数的生成过程生成一个如下形式的三角形阵列:

为了书写方便,我们通常将Ni,p(u)写为Ni,p。

性质:

(1)(局部支撑性)如果u∉[ui,ui+p+1),则Ni,p(u)=0。

(2)在任意给定的节点区间[uj,uj+1)内,最多p+1个Ni,p是非零的,它们是Nj-p,p,…,Nj,p。

(3)(非负性)对于所有的i,p和u,有Ni,p(u)≥0。

(4)(规范性)对于任意的节点区间[ui,ui+1),当u∈[ui,ui+1)时

(5)(可微性)在节点区间内部,Ni,p(u)是无限次可微的。

(6)除p=0的情况外,Ni,p(u)严格地达到最大值一次。

#include<iostream>
int FindSpan(int n,int p,double u,double* U)
/*计算参数u所在区间的下标返回参数u所在节点区间的下标,即u所在的区间[ui,ui+1]的iU=[u0,u1,u2,...,um]n:节点数组最大下标-1,n=m-1p:次数u:参数U:节点数组*/
{if(u==U[n+1]){return n;}int low=p;int high=n+1;int mid=(low+high)/2;while(u<U[mid] or u>=U[mid+1]){if(u<U[mid]){high=mid;}else{low=mid;}mid=(low+high)/2;}return mid;
}
void BasisFuns(int i,double u,int p,double* U,double* N)
/*计算非零B样条基函数的值i:参数u所在节点区间的下标,即u所在的区间[ui,ui+1]的ip:次数u:参数U:节点数组N:B样条基函数值数组N(i,i-p),...,N(i,p)*/
{double temp=0.0;double saved=0.0;double left[p+1];double right[p+1];N[0]=1.0;for(int j=1;j<=p;j++){left[j]=u-U[i+1-j];right[j]=U[i+j]-u;saved=0.0;for(int r=0;r<j;r++){temp=N[r]/(right[r+1]+left[j-r]);N[r]=saved+right[r+1]*temp;saved=left[j-r]*temp;}N[j]=saved;}
}
int main()
{int n=10;const int p=2;double u=5.0/2;double U[]={0,0,0,1,2,3,4,4,5,5,5};double N[p+1];BasisFuns(4,u,p,U,N);std::cout<<FindSpan(n,p,u,U)<<std::endl;for(int i=0;i<=p;i++){std::cout<<N[i]<<std::endl;}system("pause");
}
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core通过读取配置文件来动态生成接口

如果希望接口是每次通过配置文件生成的&#xff0c;这样设计一些低代码的方式来获得接口。 系统目录结构&#xff1a; 启动配置代码&#xff1a; using Microsoft.AspNetCore.Hosting; using System.Configuration; using System.Data.Entity; using Swashbuckle.AspNetCore.…

[Python] 什么是PCA降维技术以及scikit-learn中PCA类使用案例(图文教程,含详细代码)

什么是维度&#xff1f; 对于Numpy中数组来说&#xff0c;维度就是功能shape返回的结果&#xff0c;shape中返回了几个数字&#xff0c;就是几维。索引以外的数据&#xff0c;不分行列的叫一维&#xff08;此时shape返回唯一的维度上的数据个数&#xff09;&#xff0c;有行列…

【学网攻】 第(14)节 -- 动态路由(EIGRP)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由EIGRP是什么&#xff1f; 二、实验 1.引入 实验步骤 实验拓扑图 实验配置 看到D开头是便是我们的EIGRP动态路由 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学…

阿里云智能集团副总裁安筱鹏:企业数字化的终局是什么?

以下文章来源于数字化企业 &#xff0c;作者安筱鹏博士 回答数字化终局追问的起点是&#xff0c;企业需要重新定义我是谁。成为有竞争力的行业领导厂商&#xff0c;你应当成为一个客户运营商&#xff0c;即能够实时洞察、实时满足客户需求&#xff0c;追求极致的客户体验。而要…

版本管理工具git: 谨慎使用git中的撤回操作

文章目录 一、背景二、解决方案1、步骤一2、步骤二 三、参考 一、背景 昨天代码分支提交错了&#xff0c;idea中使用了如下操作&#xff0c;结果代码不见了 二、解决方案 1、步骤一 使用git reflog命令&#xff0c;查看提交记录&#xff0c;找到之前commit操作的哈希值 …

雾锁王国Enshrouded个人专服怎么搭建?怎么多人联机一起玩?

前面跟大家分享了『零基础也可以10秒开服幻兽帕鲁&#xff0c;只需要鼠标点击几下即可自动部署』一文&#xff0c;大家可以快速搭建属于自己的幻兽帕鲁专服。现在我们同样可以在10秒搭建雾锁王国专服&#xff0c;让您与朋友一起合作战胜强大的Boss。 雾锁王国&#xff1a;你是火…

Docker本地部署可编辑开源导航页并发布公网分享好友可访问

文章目录 1. 使用Docker搜索镜像2. 下载镜像3. 查看镜像4. 启动容器5. 浏览器访问6. 远程访问6.1 内网穿透工具安装6.2 创建远程连接公网地址6.3 使用固定二级子域名地址远程访问 今天和大家分享如何使用Docker本地部署一个开源的简约风格网址导航页&#xff0c;支持五种搜索引…

基于C++的面向对象程序设计:类与对象的深入剖析

面向对象程序设计的基本特点 面向对象程序设计的基本特点包括&#xff1a;抽象、封装、继承、多态。 抽象 抽象是指对具体问题或对象进行概括&#xff0c;抽出其公共性质并加以描述的过程。一般情况抽象分为数据抽象和行为抽象&#xff0c;其中数据抽象是指一个对象区别于另…

C++/数据结构:二叉搜索树的实现与应用

目录 一、二叉搜索树简介 二、二叉搜索树的结构与实现 2.1二叉树的查找与插入 2.2二叉树的删除 2.3二叉搜索树的实现 2.3.1非递归实现 2.3.2递归实现 三、二叉搜索树的k模型和kv模型 一、二叉搜索树简介 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0…

IDEA的properties默认编码是UTF-8但是不显示中文

问题描述 今天打开IDEA项目&#xff0c;发现messages_zh_CN.properties不显示中文了 但奇怪的是target下的文件就是展示的中文 而且我IDEA已经配置了编码格式是UTF-8了 使用nodepad打开源文件&#xff0c;也是展示编码格式是UTF-8 &#xff08;打开target下的文件&#xff0c;…

硅谷仿制网易云小程序登录问题解决

引言&#xff1a; 尚硅谷视频中的登录拥挤问题&#xff0c;导致无法登录&#xff0c;所以&#xff0c;我去gitee上从新找了个别人搞好点网易云的api接口【也是比较出名的那个&#xff0c;不想用不行啊&#xff0c;我也试过很多方法都不行】 接口详解网址&#xff1a;网易云音乐…

python基础——池

池的介绍&#xff1a; 提前创建进程池&#xff0c;防止创建的进程数量过多导致系统性能受到影响&#xff0c;在系统执行任务时&#xff0c;系统会使用池中已经创建进程/线程&#xff0c;从而防止资源的浪费&#xff0c;创建的进程/线程可以让多个进程使用&#xff0c;从而降低…

TypeScript Array(九) 数组

1.TypeScript Array 数组 1.1. 描述 数组对象是使用单独的变量名来存储一系列的值。  &emsp比如&#xff0c;你现在有一组数据&#xff0c;存单独变量如下&#xff1a; var data1"Android"; var data2"Java"; var data3"Harmony";那如果有…

南昌市青山湖、滕王阁、洛阳路隧道FM调频广播集群通信调度系统应用案例

一、用户需求 青山湖隧道&#xff0c;是南昌市一条东西走向的城市主干道&#xff0c;隧道为双向6车道&#xff0c;长1070米&#xff0c;其中湖底暗埋段为550米&#xff0c;净高5.45米&#xff0c;两孔每孔净宽12.4米。 滕王阁隧道是南昌市沿江北大道与沿江中大道连通工程&#…

计算机网络实验二

目录 实验二 交换机的基本配置 1、实验目的 2、实验设备 &#xff08;1&#xff09;实验内容&#xff1a; &#xff08;2&#xff09;练习&#xff1a; 1.实验内容一&#xff1a;&#xff08;交换机的配置方式&#xff09; 2.实验内容二&#xff1a;&#xff08;交换机…

云打印怎么收费?云打印需要付费吗?

随着云打印概念的火热发展&#xff0c;很多有打印需求的App或者个人用户都想使用易绘创云打印服务。那么易绘创云打印怎么收费&#xff1f;云打印需要付费吗&#xff1f;今天就带大家来了解一下。 云打印怎么收费&#xff1f;云打印需要付费吗&#xff1f; 很多有打印需求的小…

正则表达式 与文本三剑客(sed grep awk)

一&#xff0c;正则表达式 &#xff08;一&#xff09;正则表达式相关定义 1&#xff0c;正则表达式含义 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意…

EMQX 性能调优:TCP SYN 队列与 Accept 队列

在上一篇博客&#xff08;EMQX 性能调优&#xff1a;最大连接与文件描述符&#xff09;&#xff0c;我们深入研究了 MQTT 连接与文件描述符之间的关系&#xff0c;介绍了如何修改文件描述符相关的内核参数来突破默认的最大连接数量限制。 但你可能会发现&#xff0c;在某些情况…

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)

案例代码如下&#xff1a; 非静态的方法虚拟机会自带一个关键字&#xff0c;如下&#xff1a; 但是不能手动出来&#xff0c;它的类型就是当前类&#xff1b; 通过输出this&#xff0c;得到当前s1,s2 的地址&#xff1b; 所以在输出时会有隐藏的this&#xff0c;所以this所指向…

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…