当前位置: 首页 > article >正文

先从路径优化开始学习FastPlanner之B样条曲线平滑路径(一):从拉格朗日插值到B样条曲线

参考B站视频学习
注:我会列出学习他人的博客,但我不涉及具体推导,原理讲解,旨在于理解必须概念后写代码出效果。

  1. 给若干点如何获得一条平滑的曲线? 两个方法插值、拟合
    插值要经过给定点,拟合不用经过。
    经典插值方法:拉格朗日插值法和牛顿插值法。

区别:

拉格朗日插值法

优点
  1. 简单易懂: 拉格朗日插值法公式简单直观,易于理解和实现。
  2. 无需求导: 拉格朗日插值法不需要对函数进行求导,只需知道数据点即可。
  3. 全局性: 构造出的插值多项式在整个区间上有效,而非局部有效。
缺点
  1. 计算复杂度: 随着数据点数量的增加,拉格朗日插值法的计算量会显著增加,尤其是在多项式阶数较高时。
  2. 数值稳定性: 当数据点间距离较小时,拉格朗日插值法可能导致数值不稳定,尤其是在浮点运算中。
  3. 龙格现象: 如果数据点分布不均匀,特别是在两端密集,中间稀疏的情况下,拉格朗日插值可能出现所谓的“龙格现象”,即插值多项式在某些区域剧烈波动。
  4. 难以更新: 即使一个数据点发生变化时,需要重新计算整个插值多项式。 这点贝塞尔曲线也是,但贝塞尔曲线是种拟合方法

牛顿插值法:主要区别分段插值

优点
  1. 数值稳定性: 牛顿插值法通常比拉格朗日插值法更稳定,尤其是在数据点分布不均匀时。
  2. 递推性质: 牛顿插值法可以利用递推公式来计算差商,从而减少计算量。
  3. 易于更新: 当数据点发生变化时,只需要调整受影响的部分,而不需要重新计算整个插值多项式。
  4. 灵活性: 牛顿插值法同样支持任意数量的数据点,并且可以通过添加或删除数据点来更新插值多项式。
缺点
  1. 复杂度: 牛顿插值法需要计算差商,这在一定程度上增加了计算复杂度。
  2. 分段插值: 牛顿插值法更适合分段插值,即在每个数据点之间使用低阶多项式插值。
  3. 计算过程: 相对于拉格朗日插值法,牛顿插值法的计算过程稍微复杂一些,需要构建差商表。
  4. 龙格现象: 与拉格朗日插值法一样,牛顿插值法也可能出现龙格现象,尤其是在数据点分布不均匀时。

在这里插入图片描述

拟合一组点常用方法:贝塞尔曲线,B样条曲线

首先明确阶和次数的区别: 阶数=次数+1 意思和贝塞尔曲线同理,K次B样条曲线意思是曲线方程最高次数是K次。大家在写代码或者推的时候要统一,不要一会用阶一会用次数表示,容易混淆。
具体递推方程这里不细讲,参考替他大佬文章很清楚。先从路径优化开始学习FastPlanner
在这里插入图片描述
这里强调: 次数K和m,n关系:m=n+k+1 ,n+1表示控制点总个数(注意区分:Bi,k中i最大取n这两个n是一个值,从0开始),m表示分几段的段数,m+1表示总节点数。注意节点和控制点区别:控制点就是我们拟合给出来的点,要根据它拟合曲线。节点是人为的再细划分

然后,一般是,确定点数n,确定要几次B样条的K后,在确定出m的大小。

在这里插入图片描述
当t值取t2-t3时,根据德布尔-考克斯分段函数计算,可以看出最终只有前三个基函数非0,原因是k=0时只有在定义域内的都是1,其余全是0.
总结:根据控制点数确定n,在决定要几次B样条的k,计算出m

放一个大佬的专栏原理详细推导 很清楚 这里
这里个人总结关键点

首先说明:P阶样条p-1阶导数连续,原因上面总结
在这里插入图片描述

在这里插入图片描述

有的时候遇见带正重复度的节点B样条

在这里插入图片描述

下一章学习fastplanner中的B样条代码


http://www.kler.cn/a/282351.html

相关文章:

  • Vue中的导航守卫有哪三种?分别有什么作用
  • WP网站如何增加文章/页面的自定义模板
  • 如何使用Django写个接口,然后postman中调用
  • MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能
  • 27-压力测试
  • 移除元素(leetcode 27)
  • 不同语言的转义字符
  • flutter执行Asset中的可执行文件
  • PHP $_GET 变量
  • Oceanbase 使用OBD 一键性能测试(Sysbench,TPCC,TPCH)
  • Superset 连接elasticsearch
  • 深度学习基础—简单的卷积神经网络
  • OpenCV绘图函数(10)根据指定像素计算字体大小的函数getFontScaleFromHeight()的使用
  • 8月28日
  • 若依微服务Admin控制台不显示ruoyi-file问题解决
  • Mysql在服务器中的源码部署
  • Ps:渲染视频
  • 关于springboot对接chatglm3-6b大模型的尝试
  • 消息称华为纯血鸿蒙部分应用采用虚拟机方案
  • 三级_网络技术_53_应用题
  • pytorch Dataset类代码学习
  • 在PyCharm终端使用where命令不返回路径问题
  • 顶级域名服务器 - TLD服务器
  • RK方案有时一开机要设置GPIO口点平
  • Sentinel-1 Level 1数据处理的详细算法定义(九)
  • QT多线程遍历注册表