【B样条曲线:计算系数】

news2024/9/27 19:25:54

对这篇文章的翻译,仅学习。

B样条曲线:计算系数

尽管de Boor的算法是计算b样条曲线上对应于给定u的点的标准方法,但我们在许多情况下确实需要这些系数(例如,曲线插值和逼近)。我们将举例说明一种简单的方法。

给定一条由n+1个控制点P0, P1,…, Pn,和 m+1节 u0=u1=…=up=0, up+1, up+2,…, um-p-1, um-p=um-p+1=…= um=1,我们想计算系数N0,p(u), N1,p(u),…, Nn,p(u)对于任意给定在[0,1]内的u。一种简单的方法是使用下面的递归关系:
在这里插入图片描述
然而,这是一个非常耗时的过程。要计算Ni,p(u),我们需要计算Ni,p-1(u)和Ni+1,p-1(u)。为了计算Ni,p-1(u),我们需要计算Ni,p-2(u)和Ni+1,p-2(u)。为了计算Ni+1,p-1(u),我们需要Ni+1,p-2(u)和Ni+2,p-2(u)。正如你所看到的,Ni+1,p-2(u)出现了两次,因此,它的递归计算也将被重复。随着递归的深入,将会发生更多的重复计算。这与前面一页讨论的de Casteljau算法的递归版本非常相似。因此,计算速度非常慢。

有一个简单的方法。假设u在结跨度[uk,uk+1)中。b样条基函数的一个重要性质是,在[uk,uk+1)上p次基函数最多有p+1个非零,即:Nk-p,p(u), Nk-p+1,p(u), Nk-p+2,p(u),…, Nk-1,p(u), Nk,p(u)。根据定义,在[uk,uk+1)上0次的唯一非零基函数是Nk,0(u)。因此,系数可以从Nk,0(u)以“扇出”三角形形式计算,如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3wXH7Ge0-1672822943935)(https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-triangle.jpg#pic_center)]
由于Nk,0(u)在结跨度[uk,uk+1)上= 1,其他0次b样条基函数在[uk,uk+1)上为0,我们可以从Nk,0(u)开始,计算1次Nk-1,1(u)和Nk,1(u)的基函数。从这两个值,我们可以计算出2次的基函数Nk-2,2(u), Nk-1,2(u)和Nk,2(u)。这个过程重复进行,直到计算出所有p+1个非零系数。

在这个计算中,像Nk-1,2(u)这样的“内部”值有一个左上前驱(即Nk-1,1(u))和一个左下前驱(即Nk,1(u));在上述三角形的右上方向边界上的值,如Nk-1,1(u),只有左下方向的前驱(即Nk,0(u));在这个三角形的右下方向边界上的值,如Nk,2(u),只有一个左上方向的前驱(即Nk,1(u))。因此,在右上(右下)方向边界上的值使用定义中的递归关系的第二(一)项。只有内部值同时使用这两项。基于上述观察,我们得到以下算法:

算法

在这里插入图片描述
上面的算法不是很高效。它的目的是用一种直观和易于理解的方式来说明这个想法。数组 N[] 保存了所有中间结果和最终结果。对于d阶,N[i]存储变量Ni,d(u)的值,最后N[k-d], N[k-d+1],…, N[k]包含非零系数。计算从d=1开始,因为我们知道唯一的非零基函数是Nk,0(u),如果u在节跨度[uk,uk+1)中。外层循环让度d从1到p。begin后面的第一个赋值语句只用一项计算Nk-d,d(u)(即它在三角形中的左下项,Nk-d+1,d-1(u)),内层for循环只用一项计算“内部”项,外层循环的最后一个语句只用一项计算Nk,d(u)(即它的左上项,在三角形中的Nk,d-1(u))。

你能让这个算法更高效吗?

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

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

相关文章

【PyQt】PyQt的缺陷及意外退出的可能原因

1 背景 最近在软件项目中比较深入的用到了 Qt GraphicsView Framework。PyQt 作为 Qt 的非官方Python绑定库(Qt的官方Python绑定库是PySide)总是出现很多意外崩溃/Bug,并且很难调试和追踪。 2 问题 软件项目中需要自定义 QGraphicsItem &a…

初识Cocos Creator

1.1 Cocos 不同时期与产品刚接触Cocos家族的时候,会有很多个Cocos的版本与分支,比如Cocos2d, Cocos2d-x, Cocos Creator 1.x, Cocos Creator 2.x, Cocos Cretor3D, Cocos Creator 3.x, CocosDashboard, 等我们先把Cocos 的主要产品脉络梳理一遍。对啦&am…

人体reid数据集

mars数据集 参考:https://blog.csdn.net/qq_34132310/article/details/83869605 整个Mars数据的大小大概有6.3G。 bbox_train文件夹中,有625个子文件夹(代表着625个行人id),共包含了8298个小段轨迹(track…

联合证券|战略新兴产业火了,高增长低估值股曝光

导读:2022年,A股商场值得记载的前史性大事件不断。这一年,A股商场上市公司数量正式打破5000家,战略新兴产业上市公司数量打破2500家,占比初次打破50%大关。这一年,A股商场顶住杂乱的外部环境因素&#xff0…

Pytorch介绍与基本使用

前言Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程,根据我在网上的了解,相比于Tensorflow,Pytorch简介易用。一、为什么选择Pytorch简…

在VBA里使用range(cells(),cells()) ,一个容易出错的点:需要注意 range() 和cells() 前都指定好sheet名!

1 问题 在VBA里使用range(cells(),cells()) 发现处了下面这个状况 当前sheet就是sh1时,代码正常运行当前sheet不是sh1时,有一行代码报错 arr3 sh1.Range(Cells(4, 3), Cells(16, 8))为什么会这样呢?Sub test1001()Dim sh1 As ObjectSet s…

足球视频AI(二)——球员与球的目标检测

一、基础概念 1.1 识别目标: 1)固定机位的视频中球员逐帧识别 2)固定机位的视频中球逐帧识别 3)位置换算与记录 1.2 实现思路 1,利用OpenCV的相邻帧差异识别移动物体 2,利用YOLO7的机器学习识别对象&…

LNPS递送辅料,DOPE,4004-05-1,二油酰磷脂酰乙醇胺

LNPS递送辅料,DOPE,4004-05-1,二油酰磷脂酰乙醇胺 中文名称 :1,2-二油酰-sn-甘油-3-磷酸乙醇胺 中文别称 :二油酰磷脂酰乙醇胺 英 文 名 :DOPE 英文别称 :1,2-Dioleoyl-sn-glycero-3-phospho…

数据仓库介绍

数据仓库数据仓库的概念数据仓库的主要特征数据仓库的主流开发语言-sql结构化数据sql语句数据仓库的概念 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面向分析的集…

一、MyBatis-Plus简介

文章目录一、MyBatis-Plus简介1、简介2、特性3、支持数据库4、框架结构5、代码及文档地址【尚硅谷】MyBatisPlus教程-讲师:杨博超 失败,是正因你在距成功一步之遥的时候停住了脚步。 一、MyBatis-Plus简介 1、简介 MyBatis-Plus(简称 MP&am…

吴恩达【神经网络和深度学习】Week2——神经网络基础

文章目录1、Logistic Regression as a Neural Network1.1、Binary Classification1.1.1、Introduction1.1.2、Notations1.2、Logistic Regression1.3、Logistic Regression Cost Function1.4、Gradient Descent1.5、Derivatives(导数)1.6、More derivati…

基于支持向量回归(SVR)和PROSAIL模拟光谱数据的叶面积指数反演

前言本博客利用PROSAIL模型模拟出MODIS的光谱数据和LAI,然后采用支持向量回归(SVR)方法建立NDVI与LAI 的回归模型,用于LAI的反演。训练和测试数据的拟合效果还是比较好的,这表明SVR在模拟的光谱数据与LAI回归方面的可行…

NXP EMDA学习(2):串口eDMA接收和发送流程详解

在单片机中,最基础的一个驱动就是串口,本文就以NXP中串口eDMA的收发为例,通过分析源代码来理解eDMA的执行过程。 参考代码:Kinetis K64 Sub-Family SDK 2.11中的uart_edma_transfer.c 文章目录1 串口基本初始化2 DMAMUX初始化3 初…

Go语言 WaitGroup 源码知多少

前面的文章我们写协程的时候有用到 WaitGroup 我们的写法大概是这样的 func main() {...dothing()wg : sync.WaitGroup{}// 控制 多个子协程的声明周期wg.Add(xx)for i : 0; i < xx; i {go func(ctx context.Context) {defer wg.Done()...dothing()}(ctx)}...dothing()// …

【Android春招】Android基础

一、填空题 1&#xff0e;Android是基于__ 的移动端开源操作系统。 Linux 2&#xff0e;Android系统是由__公司推出的。 谷歌 3&#xff0e;Android 11对应的API编号是__。 30 4&#xff0e;App除了在手机上运行&#xff0c;还能在电脑的__上运行。 模拟器&#xff08;AVD&…

Pytorch SoftMax回归

目录 数据集 从零实现 简单实现 数据集 导入所需库 torchvision计算机视觉所用torch的库 %matplotlib inline import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l # 用SVG清晰度高 d2l.use_…

华为交换机OSPF对接思科交换机EIGRP,牛逼配置!

简介 思科交换机OSPF分别与华为交换机OSPF以及思科交换机EIGRP进行路由交互&#xff0c;间接实现华为交换机OSPF对接思科交换机EIGRP的功能。 配置注意事项 该案例适用于支持OSPF的华为交换机。该案例仅提供OSPF对接EIGRP的基本配置。思科交换机与华为交换机对接替换时&…

固定资产年结操作步骤 及常见问题处理:AJAB 关闭资产年度报错问题处理

目录 第一步、打开新的资产会计年度 TCODE &#xff1a; AJRW 第二步、 关闭资产年度 TCODE&#xff1a;AJAB 三、结果校验 四、 常见问题 分析 第一步、打开新的资产会计年度 TCODE &#xff1a; AJRW 输入公司编码&#xff0c;输入新的资产会计年度 先测试运行&a…

【计算机网络-数据链路层】差错控制(检错编码、纠错编码)

文章目录1 检错编码——奇偶校验码1.1 奇偶校验码1.2 相关例题2 检错编码——循环冗余码&#xff08;CRC&#xff09;2.1 发送端——生成冗余码2.2 接收端——检错2.3 相关例题3 纠错编码——海明码3.1 确定海明码的位数3.2 确定校验位的分布3.3 对校验码进行分组3.4 求出校验码…

LCHub:中国企业数字化门槛持续降低,数字化转型成本下降达80%

12月27日,钉钉联合中国信息通信研究院发布《“小快轻准”持续降低数字化转型门槛》研究报告(以下简称“报告”)。报告指出,中国企业数字化门槛正持续降低,数字化转型成本已降低80%;以钉钉为代表的数字平台,为中小企业提供了一条普惠、敏捷、低成本的数字化转型新路径;中国…