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

本文主要是介绍先从路径优化开始学习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
下一章学习fastplanner中的B样条代码

这篇关于先从路径优化开始学习FastPlanner之B样条曲线平滑路径(一):从拉格朗日插值到B样条曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106433

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.