思路:点足够密的话直接用 diff、gradient 求曲率,稀疏的话先插值再算曲率。

公式:

点密的情况

  1. 输入曲线坐标(1-2)
  2. 求一、二阶导数(4-9)
  3. 通过公式求得曲率(10)
x = 0:0.01:7;
y = cos(x*0.5*pi);h1 = abs(diff(x));
h = [h1 h1(end)];
ht = h;y1 = gradient(y)./ht;
y2 = gradient(y1)./ht;
curv = abs(y2)./sqrt((1+y1.^2).^3);plot(x,y,'-',x,curv,'--r);
legend('Raw Data, 'Curvature','Location',"best");
grid on

图像与下文理论值图像相同

点稀疏的情况

  1. 输入散点坐标(1-2)
  2. 用样条曲线(B-Spline)等方法插值得到拟合曲线(3-4)
  3. diff、gradient 函数求拟合曲线的一、二阶导数(6-11)
  4. 通过公式求得曲率(12)

例:余弦函数取 8 个点,用 B-Spline 插值

x = 0:1:7;
y = cos(x*0.5*pi);
xx = 0:0.01:7;
yy = spline(x,y,xx);h1 = abs(diff(xx));
h = [h1 h1(end)];
ht = h;yy1 = gradient(yy)./ht;
yy2 = gradient(yy1)./ht;
curv = abs(yy2)./sqrt((1+yy1.^2).^3);plot(xx,yy,'-',xx,curv,'--r',x,y,'o-');
legend('B-Spline', 'Curvature','Raw Data','Location',"best");
grid on

效果图

补充用法

求最大曲率并在图中标出

[max_val,max_ind]=max(curv);
hold on
plot(xx(max_ind),yy(max_ind),'*r');

与理论值(余弦函数曲线)对比

曲线对比

曲率对比

几种插值方法对比

列举四种方法,分别为:分段线性插值、三次样条曲线(B-Spline)插值、三次 Hermite 插值(PCHIP)、修正 Akima 分段三次 Hermite 插值(Akima)

Case 1: 三维螺线

三维螺线散点

插值

俯视

侧视

Case 2:二维梯形波

二维梯形波

Case 3:三维不规则折线

三维不规则折线(不等间距)

对比可得:

Case 1:B-Spline>Akima>PCHIP>Linear

Case 2:Linear>PCHIP>Akima>B-Spline

Case 3:Linear≈PCHIP≈Akima>B-Spline

故在插值的时候需要选择适合的计算方法

开坑待填

三维曲线曲率计算

其实早就写好了,但是实在懒得整理_(´ཀ`」 ∠)_

MATLAB 插值+计算离散点曲率相关推荐

  1. 马赫数和速度相互转换函数(matlab插值计算)

    function [Mach] = v2Mach(v,h) % 速度与马赫数转换函数,插值计算 % 输入:速度v 单位 m/s ,高度h 单位m 输出:Mach H=[0 100 500 1000 1 ...

  2. 计算离散点曲率的方法

    以三点外接圆方式计算: 以三个离散点的外接圆半径的倒数作为中间点的曲率计算公式为: k=4Sabck = \frac{4S}{abc}k=abc4S​ 其中S为三点构成三角形的面积. a.b.c分别为 ...

  3. matlab科学计算的应用,精通MATLAB科学计算与数据统计应用 高清版pdf[12MB]

    在各行各业的工程实践中,有大量的科学计算工作需要完成.传统的计算方式一般需要较长的周期,相比之下开发效率极高的MATLAB是一个更好的选择.在MATLAB中,编程细节被简化,繁琐的实现过程也被略去,用 ...

  4. matlab曲面的最小值,在matlab中计算曲面的曲率

    我想计算点云中某些点的均值和高斯曲率. 我有x,y,z,它们是坐标并且是1d数组.我想使用下面的代码,但在输入参数中,X,Y和Z是2d数组,我不知道这意味着什么,以及如何计算与它们对应的2d数组. 非 ...

  5. 利用MatLab对数据进行插值计算(分段插值和三次样条插值)

    利用MatLab对数据进行插值计算 分段线性插值 三次样条插值 例子 分段线性插值 应用的函数为: y=interp1(x0,y0,x)或y=interp1(x0,y0,x,'linear') 其中的 ...

  6. MATLAB科学计算机lnx代码,[2018年最新整理]Matlab科学计算.ppt

    [2018年最新整理]Matlab科学计算 Matlab与科学计算 计算机学院 刘咏梅 Email:liuyongmei@hrbeu.edu.cn 第二章 MATLAB数值计算基础 Introduct ...

  7. 坐标轨迹计算_【老杨讲坛】737NG无系留最大风速限制的插值计算

    点击上方海航技术小蓝字,即可关注官方微信 老杨讲坛第三十七期 -老杨说- 小伙伴们,大家好,新一期的<老杨讲坛>又和大家见面啦!经历海口近期高温的炙烤和大风的考验,小编是多么怀念微风吹拂的 ...

  8. 编写matlab语句计算试题,MATLAB测验考试题

    <MATLAB测验考试题>由会员分享,可在线阅读,更多相关<MATLAB测验考试题(12页珍藏版)>请在装配图网上搜索. 1.一.填空题1.在MATLAB中,清除所有变量的命令 ...

  9. matlab多项式计算题目,MATLAB数据分析与多项式计算-习题答案

    <MATLAB数据分析与多项式计算-习题答案>由会员分享,可在线阅读,更多相关<MATLAB数据分析与多项式计算-习题答案(4页珍藏版)>请在人人文库网上搜索. 1.第6章 M ...

  10. [Matlab科学计算] 频谱分析和FFT算法总结

    频谱分析是一种非常重要的信号处理方法,在机械设备故障诊断.振动系统分析.电力系统.无线电通信.信息图像处理和自动控制等学科中都有重要应用.频谱分析的核心是1965年Cooely-Tukey发表的快速傅 ...

最新文章

  1. 【自然语言处理】hmm隐马尔可夫模型进行中文分词 代码
  2. virtualbox 中centOS在不能ssh
  3. 【老王来了】之隔壁路由器坏了,他来了...
  4. RocketMQ安装内存不足的问题
  5. Java语言与sikuli配合
  6. Mac OSX 安装nvm(node.js版本管理器)
  7. 记录一些常见的沟通问题 #29
  8. linux浏览器打开pdf文件,linux下的pdf浏览器(可加批注)
  9. 10张漫画解释进程与线程的区别与联系
  10. python json.dumps() 中文乱码问题
  11. 用户增长:APP推广的五大方法
  12. opencv 图形识别源码(vs2013+opencv3.0)
  13. 我爱淘冲刺阶段站立会议每天任务5
  14. discuz怎么自定义php,Discuz添加自定义数据调用模块
  15. Android添加拍照功能,Android开发实现拍照功能的方法实例解析
  16. linux pptpd无法访问内网,Linux系统中Starting pptpd无法运行的解决办法
  17. 爱征信,就是爱自己 | 个人征信怎么查?攻略在这里!
  18. macOS升级node
  19. VB实现自动生成统计图表
  20. C++ constants

热门文章

  1. 第5章-构建Spring Web应用程序
  2. DSP TMS320C5509A 控制DDS AD9854芯片进行FSK调制
  3. ABAP GOS 上传标准附件
  4. 逆水寒服务器列表文件,逆水寒9月20日服务器合并结果公告一览 逆水寒9.20合服大全有哪些...
  5. 第二类斯特林数 - Push Botton Lock(POJ 3088)
  6. 内存虚拟化硬件基础——EPT
  7. Intel VT学习笔记(八)—— 开启EPT
  8. Ada的故事(转载)
  9. steam平台的Don‘t Starve Together 饥荒联机版管理后台
  10. Java中dynamic是什么_java中dynamic web project与web project 的区别