B样条曲线

  1. 零次 B 样条

F i , 0 ( t ) = { 1 t i ≤ t < t i + 1 0 o t h e r s \bm{F}_{i,0}(t) = \begin{cases} 1 & t_i \leq t <t_{i+1} \\ 0 & others \end{cases} Fi0(t)={10tit<ti+1others
在这里插入图片描述
2. 一次 B 样条,
F i , 1 ( t ) = t − t i t i + 1 − t i F i , 0 ( t ) + t i + 2 − t t i + 2 − t i + 1 F i + 1 , 0 ( t ) \bm{F}_{i, 1}(t) = \frac{t - t_i}{t_{i+1} - t_i} \bm{F}_{i, 0}(t) + \frac{t_{i+2} - t}{t_{i+2} - t_{i+1}} \bm{F}_{i+1, 0}(t) Fi,1(t)=ti+1tittiFi,0(t)+ti+2ti+1ti+2tFi+1,0(t)

通过

F i , 0 ( t ) = { 1 t i ≤ t < t i + 1 0 o t h e r s F i + 1 , 0 ( t ) = { 1 t i + 1 ≤ t < t i + 2 0 o t h e r s \bm{F}_{i,0}(t) = \begin{cases} 1 & t_i \leq t< t_{i+1} \\ 0 & others \end{cases} \qquad \bm{F}_{i+1, 0}(t) = \begin{cases} 1 & t_{i+1} \leq t <t_{i+2} \\ 0 & others \end{cases} Fi,0(t)={10tit<ti+1othersFi+1,0(t)={10ti+1t<ti+2others

可以得到

F i , 1 ( t ) = { t − t i t i + 1 − t i t − i ≤ t < t i = 1 t i + 2 − t t i + 2 − t i + 1 t i + 1 ≤ t < t i + 2 0 o t h e r s \bm{F}_{i, 1}(t) = \begin{cases} \frac{t - t_i}{t_{i+1} - t_i} & t-i \leq t < t_{i=1}\\ \\ \frac{t_{i+2} - t}{t_{i+2} - t_{i+1}} & t_{i+1} \leq t <t_{i+2} \\ \\ 0 & others \end{cases} Fi,1(t)= ti+1tittiti+2ti+1ti+2t0tit<ti=1ti+1t<ti+2others
在这里插入图片描述
3. 二次 B 样条

F i , 2 ( t ) = t − t i t i + 2 − t i F i , 1 ( t ) + t i + 3 − t t i + 3 − t i + 1 F i + 1 , 1 ( t ) \bm{F}_{i, 2}(t) = \frac{t - t_i}{t_{i+2} - t_i} \bm{F}_{i, 1}(t) + \frac{t_{i+3} - t}{t_{i+3} - t_{i+1}} \bm{F}_{i+1, 1}(t) Fi,2(t)=ti+2tittiFi,1(t)+ti+3ti+1ti+3tFi+1,1(t)

F i , 1 ( t ) = { t − t i t i + 1 − t i t i ≤ t < t i + 1 t i + 2 − t t i + 2 − t i + 1 t i + 1 ≤ t < t i + 2 0 o t h e r s F i + 1 , 1 ( t ) = { t − t i + 1 t i + 2 − t i + 1 t i + 1 ≤ t < t i + 2 t i + 3 − t t i + 3 − t i + 2 t i + 2 ≤ t < t i + 3 0 o t h e r s \bm{F}_{i, 1}(t) = \begin{cases} \frac{t - t_i}{t_{i+1} - t_i} & t_i \leq t < t_{i+1}\\ \\ \frac{t_{i+2} - t}{t_{i+2} - t_{i+1}} & t_{i+1} \leq t <t_{i+2} \\ \\ 0 & others \end{cases} \qquad \bm{F}_{i+1, 1}(t) = \begin{cases} \frac{t - t_{i+1}}{t_{i+2} - t_{i+1}} & t_{i+1} \leq t < t_{i+2}\\ \\ \frac{t_{i+3} - t}{t_{i+3} - t_{i+2}} & t_{i+2} \leq t <t_{i+3} \\ \\ 0 & others \end{cases} Fi,1(t)= ti+1tittiti+2ti+1ti+2t0tit<ti+1ti+1t<ti+2othersFi+1,1(t)= ti+2ti+1tti+1ti+3ti+2ti+3t0ti+1t<ti+2ti+2t<ti+3others

得到

F i , 1 ( t ) = { t − t i t i + 2 − t i t − t i t i + 1 − t i t i ≤ t < t i + 1 t − t i t i + 2 − t i t i + 2 − t t i + 2 − t i + 1 + t i + 3 − t i + 1 t i + 3 − t i + 1 t − t i + 1 t i + 2 − t i + 1 t i + 1 ≤ t < t i + 2 ( t i = 3 − t ) 2 ( t i = 3 − t i + 1 ) ( t i + 3 − t i + 2 ) t i + 2 ≤ t < t i + 3 0 o t h e r s \bm{F}_{i, 1}(t) = \begin{cases} \frac{t - t_i}{t_{i+2} - t_i} \frac{t-t_i}{t_{i+1}-t_i} & t_i \leq t < t_{i+1} \\ \\ \frac{t - t_i}{t_{i+2} - t_i} \frac{t_{i+2}-t}{t_{i+2}-t_{i+1}} + \frac{t_{i+3} - t_{i+1}}{t_{i+3} - t_{i+1}} \frac{t-t_{i+1}}{t_{i+2}-t_{i+1}} & t_{i+1} \leq t < t_{i+2} & \\ \\ \frac{(t_{i=3} - t)^2}{(t_{i=3} - t_{i+1})(t_{i+3} - t_{i+2})}& t_{i+2} \leq t < t_{i+3} & \\ \\ 0 & others \end{cases} Fi,1(t)= ti+2tittiti+1tittiti+2tittiti+2ti+1ti+2t+ti+3ti+1ti+3ti+1ti+2ti+1tti+1(ti=3ti+1)(ti+3ti+2)(ti=3t)20tit<ti+1ti+1t<ti+2ti+2t<ti+3others

在这里插入图片描述
根据参数 t t t 的值和次数 k k k 与节点矢量双精度数组 K n o t Knot Knot 计算第 i i i k k k 次的 B 样条基函数的 F i , k ( t ) F_{i, k}(t) Fi,k(t)

分析

F i , k ( t ) = t − t i t i + k − t i F i , k − 1 ( t ) + t i + k + 1 − t t i + k + 1 − t i + 1 F i + 1 , k − 1 ( t ) F_{i, k}(t) = \frac{t -t_i}{t_{i+k} - t_i} F_{i, k-1}(t) + \frac{t_{i+k+1} - t }{t_{i+k+1} - t_{i+1}} F_{i+1, k-1}(t) Fi,k(t)=ti+ktittiFi,k1(t)+ti+k+1ti+1ti+k+1tFi+1,k1(t)

n u m b e r a t o r 1 = t − t i n u m b e r a t o r 2 = t i + k + 1 − t d e n o m i n a t o r 1 = t i + k − t i d e n o m i n a t o r 2 = t i + k + 1 − t i + 1 c o f f i c i e n t 1 = n u m b e r a t o r 1 d e n o m i n a t o r 1 c o f f i c i e n t 1 = n u m b e r a t o r 2 d e n o m i n a t o r 2 v a l u e 1 = c o f f i c i e n t 1 × F i , k − 1 ( t ) v a l u e 2 = c o f f i c i e n t 2 × F i + 1 , k − 1 ( t ) numberator_1 = t - t_i \\ numberator_2 = t_{i+k+1} - t \\ denominator_1 = t_{i+k} - t_i \\ denominator_2 = t_{i+k+1} - t_{i+1} \\ cofficient_1 = \frac{numberator_1 }{denominator_1 }\\ cofficient_1 = \frac{numberator_2 }{denominator_2 }\\ value_1 = cofficient_1 \times F_{i, k-1}(t)\\ value_2 = cofficient_2 \times F_{i+1, k-1}(t) numberator1=ttinumberator2=ti+k+1tdenominator1=ti+ktidenominator2=ti+k+1ti+1cofficient1=denominator1numberator1cofficient1=denominator2numberator2value1=cofficient1×Fi,k1(t)value2=cofficient2×Fi+1,k1(t)

在这里插入图片描述


double BasisFunctionValue(double t, int i, int k)
{double val1, val2, val;if (k == 0){if ((t >= knot[i]) && t < knot[i + 1]){return 1.0;}else{	// 其它return 0.0;}}if (k > 0) {if (t < knot[i] || t > knot[i + k + 1]) {return 0.0;		// 其它}else{double coffcient1, coffcient2;	// 凸组合系数1 凸组合系数 2double denominator = 0.0;		// 分母denominator = knot[i + k] - knot[i];	if (denominator == 0.0){// 约定 0/0 = 0coffcient1 = 0.0;}else{coffcient1 = (t - knot[i]) / denominator;	// 计算的第一项}denominator = knot[i + k + 1] - knot[i + 1];	// 递推公式第二项分母if (denominator == 0.0){// 约定 0/0 = 0coffcient2 = 0.0;}else{coffcient2 = (knot[i + k + 1] - t) / denominator;	// 递推公式第二项}val1 = coffcient1 * BasisFunctionValue(t, i, k - 1);	// 递推公式第一项的只val2 = coffcient2 * BasisFunctionValue(t, i+1, k - 1);	// 递推公式第二项的只val = val1 + val2;	// 基函数的值}}return val;
}

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

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

相关文章

Green Sock | GSAP 动画库

1.什么是“GSAP”&#xff1f; GreenSock Animation Platform&#xff08;GSAP&#xff09; 是一个业界知名的动画工具套件&#xff0c;在超过1100万个网站上使用&#xff0c;其中包括大量获奖网站&#xff01; 您可以使用GSAP在任何框架中制作几乎任何JavaScript可以触及的动…

从第一步开始

从新建文件到开始写代码 新建文件 创建项目步骤 选择C++ 选择存放路径,给项目起个名字 最后选择编译器 进入写代码环节 写代码 #include <iostream>using

地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地

近日&#xff0c;涛思数据在成都开设了“国家地震烈度速报与预警工程数据库 TDengine、消息中间件 TMQ 技术培训班”&#xff0c;这次培训活动共分为三期&#xff0c;而本次活动是第一期。其目标是帮助参与者深入了解 TDengine 和 TMQ 的技术特点和应用场景&#xff0c;并学习如…

学习Vue 03-03 为TypeScript使用defineComponent支持

03 为TypeScript使用defineComponent支持 The defineComponent() method is a wrapper function that accepts an object of configurations and returns the same thing with type inference for defining a component. defineComponent() 方法是一个封装函数&#xff0c;它…

来自云仓酒庄分享为什么同一种葡萄会使用不同的名称?

如果你只是刚刚走进葡萄酒世界&#xff0c;走在葡萄酒通道上可能会令人生畏&#xff0c;因为有不同的国家、地区和生产商&#xff0c;除此之外还有数千酿酒葡萄品种。更令人困惑的是&#xff0c;有些地方对同一种葡萄使用不同的名称&#xff01;一个著名的例子是西拉和它澳大利…

S32K312软件看门狗之Software Watchdog Timer (SWT)

S32DS的SDK中提供了Wdg&#xff0c;是属于MCAL层的&#xff0c;配置有点复杂&#xff0c;还需要以来Gpt、Mcu和Platform框架里的东西&#xff0c;配置到已经开发好的工程中还容易出现配置问题。本文主要讲解Software Watchdog Timer (SWT)的软件看门狗配置和使用示例&#xff0…

Linux配置Acado

如果需要使用acado的matlab接口&#xff0c;请移步&#xff1a;Linux Matlab配置Acado 首先&#xff0c;安装必要的软件包&#xff1a; sudo apt-get install gcc g cmake git gnuplot doxygen graphviz在自定义目录下&#xff0c;下载源码 git clone https://github.com/ac…

业务中台IT内部拉通会分享

在我们这个项目中&#xff0c;各个产品之间是通过扁平化的方式进行管理。在前期规划阶段&#xff0c;由于项目计划和模块负责人已经提前确认&#xff0c;各小组都能专注于自己的工作&#xff0c;一切井然有序。 然而&#xff0c;到了UAT阶段&#xff0c;我们发现扁平化的管理方…

Mysql锁机制与优化

欢迎大家关注我的微信公众号&#xff1a; 传送门&#xff1a;Mysql事务原理与优化 目录 概述 锁分类 锁等待分析 锁优化实践 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除了传统的计算资源&#xff08;如CPU、RAM、I/O等&…

提升Windows系统安全性的一些有效的策略

假设一个杀猪的机器人感染了病毒&#xff0c;把人识别成了猪&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 1&#xff1a;我偶然发现的&#xff1a;把所有向外的UDP都禁止&#xff0c;但是要开放53号端口&#xff0c;因为这是DNS通讯端口&#xff0c;没有这个…

Axure鲜花商城网站原型图,网上花店订花O2O本地生活电商平台

作品概况 页面数量&#xff1a;共 30 页 兼容软件&#xff1a;仅支持Axure RP 9/10&#xff0c;非程序软件无源代码 应用领域&#xff1a;鲜花网、花店网站、本地生活电商 作品特色 本作品为「鲜花购物商城」网站模板&#xff0c;高保真高交互&#xff0c;属于O2O本地生活电…

【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建

1、模板虚拟机环境准备 1.1、 hadoop100 虚拟机配置要求如下 &#xff08;1&#xff09;使用 yum 安装需要虚拟机可以正常上网&#xff0c;yum 安装前可以先测试下虚拟机联网情况 [roothadoop100 ~]# ping www.baidu.com &#xff08;2&#xff09;安装epel-release [root…