1.三次钳位B样条拟合

公式如下图:

展开结果为:
r(u)=[(1-3u+3u2-u3)Pi + (4-6u2+3u3)Pi+1 + (1+3u+3u2-3u3)Pi+2 + (u3)Pi+3 ]/6
其中u取值范围为0到1,将4个控制点的坐标带入上式之后,生成的是Pi+1到Pi+2之间的一段平滑曲线。如果希望某个点必须出现在拟合后的曲线上,则需要让该点在控制点集中连续出现三次。
比如第一个点(0,0),使P0P1P2都为(0,0),后续的点正常排列。则使用上述参数化方程可得到通过这一系列点的拟合曲线,且该曲线必定通过第一个点。
拟合结果:


2.参数方程求切线、法线

以上式B样条参数方程为目标曲线,其一阶导和二阶导为:
r’(u)=[(-1+2u-u2)Pi + (-4u+3u2)Pi+1 + (1+2u-3u2)Pi+2 + (u2)Pi+3 ]/2
r’’(u)=[(1-u)Pi + (-2+3u)Pi+1 + (1-3u)Pi+2 + (u)Pi+3 ]
则dy/dx,d2y/dx2为:
f’=y’(u)/x’(u)
f’’=(x’y’’-x’’y’)/(x’)3
f曲率=(x’y’’-x’’y’)/(x’2+y’2)3/2
f’垂线=-1/y’
其中x(u)、y(u)将控制点的x、y坐标带入可得

最开始的代码没有保存,后来算曲率什么的改了很多,比较乱

% function [  ] = B_Spline( x,y )
%三次钳位B样条拟合
close all;
clear all;
clc;
x=[0.5,3,5,6,4,2];
y=[0.5,0,2,4,5,4];
% x=[0,1,2,3,4,5];
% y=[0,1,1,1,1,1];
plot(x,y,'o');
hold on;x=[x(1),x(1),x(1),x(2:end),x(end),x(end)];%对起始点和结尾点进行重复处理,同一个点需重复出现3次,拟合后的曲线必定经过该点
y=[y(1),y(1),y(1),y(2:end),y(end),y(end)];u=linspace(0,1,5);%参数u的取值范围为[0,1],5等分即表示会取两个原始点之间的拟合曲线上的5个点。
final_x=x(1);
final_y=y(1);
r1=[];
r=[];
for i=1:(length(x)-3)%通过B样条参数方程计算拟合后曲线的离散点px=(1-3.*u+3.*u.^2-u.^3).*x(i) + (4-6.*u.^2+3.*u.^3).*x(i+1) + (1+3.*u+3.*u.^2-3.*u.^3).*x(i+2) + u.^3.*x(i+3);py=(1-3.*u+3.*u.^2-u.^3).*y(i) + (4-6.*u.^2+3.*u.^3).*y(i+1) + (1+3.*u+3.*u.^2-3.*u.^3).*y(i+2) + u.^3.*y(i+3);px=px/6;py=py/6;final_x=[final_x,px];final_y=[final_y,py];
%     plot(px,py);
%     hold on;px1=(-1+2.*u-u.^2).*x(i) + (-4.*u+3.*u.^2).*x(i+1) + (1+2.*u-3.*u.^2).*x(i+2) + u.^2.*x(i+3);%B样条参数方程的一阶导py1=(-1+2.*u-u.^2).*y(i) + (-4.*u+3.*u.^2).*y(i+1) + (1+2.*u-3.*u.^2).*y(i+2) + u.^2.*y(i+3);px1=px1/2;py1=py1/2;px2=(1-u).*x(i) + (-2+3.*u).*x(i+1) + (1-3.*u).*x(i+2) + (u).*x(i+3);py2=(1-u).*y(i) + (-2+3.*u).*y(i+1) + (1-3.*u).*y(i+2) + (u).*y(i+3);tmpr1=abs(px1.*py2 + px2.*py1)./(px1.^2 + py1.^2).^1.5tmpr=1./(abs(px1.*py2 + px2.*py1)./(px1.^2 + py1.^2).^1.5)r1=[r1,tmpr1];r=[r,tmpr];%     for j=1:length(px)%求拟合后曲线上每个点的垂线
%         k=-px1(j)/py1(j);0
%         lx=px(j)-0.1:0.1:px(j)+0.1;
%         ly=k.*(lx-px(j))+py(j);
%         plot(lx,ly);
%         hold on;
%     end
endplot(final_x,final_y);hold on;figure(2);plot(r);hold on;% for i=1:(length(x))
%     plot(x(i),y(i));
%     hold on;
% end
% end

三次B样条拟合及一阶导、二阶导、曲率计算相关推荐

  1. 一阶和二阶微分方程的物理意义???

    一阶和二阶导的含义 一阶导问题: 几何意义:曲线斜率 二阶导问题: 意义如下:(1)斜线斜率变化的速度(2)函数的凹凸性. 二阶导数是比较理论的.比较抽象的一个量,它不像一阶导数那样有明显的几何意义, ...

  2. 【高等数学】函数连续、可导、可微,洛必达法则使用条件、一阶可导、一阶连续可导、二阶可导、二阶连续可导

    目录 一.一元函数连续.可导.可微之间的关系 二.洛必达的使用条件 三.洛必达使用要注意的地方 1.等式右边极限存在 2.每导一步注意检查是否满足0/0,或∞/∞ 3.求导时注意函数怎么求导更简化 四 ...

  3. MATLAB 函数求极限,定积分,一阶导,二阶导(经典例题)

                          问题描述:分别求出求前两个表达式的值,求第三个函数的二阶导. //第一题 syms x; f=sin(x)/x; L=limit(f, x, 0); L; ...

  4. 高数 | 一阶可导 一阶连续可导 二阶可导 二阶连续可导 为什么函数二阶可导却不能用两次洛必达法则?

    导数的定义可以换一个说法:视f(x)为f(x)的零阶导数,若零阶导数在某点的近旁有定义,且其一阶导数在该点的值存在,那么称零阶导数在该点处一阶可导. 一阶导数是这样,二阶导数同理,n阶导数亦然. 分析 ...

  5. 图像运算中的一阶导与二阶导

    首先,图像是离散的数据,若求其导数就要用差分的方法,常用的差分方法是前向差分(forward differencing)与中心差分(central differencing).一阶导本质上求的是斜率, ...

  6. matlab求隐函数二阶导,求隐函数二阶导数.ppt

    求隐函数二阶导数 2.4 高阶导数 一.显函数高阶导数 二.隐函数的二阶导数 三.参数方程确定的函数的二阶导数 四.二阶导数的力学意义 五. 内容小结 作业 * 主要内容: 1.显函数高阶导数. 2. ...

  7. 拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法

    前置知识 边缘检测:图像边缘的强度(边缘线的清晰度)由图像的梯度的强度决定,因为梯度值越强,说明x轴.y轴的像素点变化越快,所以该点处越可能是边缘.边缘和梯度方向是垂直的.举个例子,下图就是用的y方向 ...

  8. 驻点以及二阶导对驻点的判断

    一.导数知识可以参考 ​​​​​​导数.偏导数.梯度.方向导数.梯度下降.二阶导数.二阶方向导数 二.微积分中几种重要的点 1.全局最大值点和全局最小值点 global minimum:在该点的函数值 ...

  9. python求函数一二阶导_python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)...

    1.问题:求系统的零状态响应 image.png 2.引入 首先用高数知识求解非齐次常系数微分方程 image.png 再利用信号与系统中冲激响应求解验证 image.png 利用MATLAB求解验证 ...

  10. Opencv--图像处理之一阶和二阶偏导数

    1. 一阶差分: 2. 二阶偏导数的推导和近似: 3. 上式以点(i+1,j)为中心,用i代换i+1可得以(i,j)为中心的二阶偏导数则有: 4. 同理: 5. 进而可推导: 6. 这样我们就可以很好 ...

最新文章

  1. ffmpeg 编译安装 ubuntu18.04 4.1
  2. centos7 php安装
  3. 5G NR PUCCH资源配置
  4. oracle undo管理机制,Oracle UNDO数据概念和管理
  5. python编写脚本pdf_你用 Python 写过哪些有趣的脚本?
  6. 苹果5G手机因疫情影响 或将推迟至10月发布
  7. 零基础转行Web前端开发自学靠谱吗?菜鸟学习前端的方法分享
  8. 无法安装Windows Live“OnCatalogResult:0x80190194”错误的解决方法
  9. 【转】女人最想要的是什么
  10. 写了一个3D彩票软件!
  11. 邮件签名——html模板
  12. MFC Rect 的详解
  13. 【可爱甜美圆嘟嘟的孩子壁纸】
  14. 社交电商如何运营推广?
  15. Springboot中EasyExcel导出及校验后导入前后台功能实现
  16. 【低功耗蓝牙】⑤ 蓝牙HID协议
  17. 出现身份验证错误,要求的函数不受支持(这可能是由于CredSSP加密Oracle修正)
  18. VS2017中英文切换设置
  19. 2022年卡塔尔世界杯黑科技盘点
  20. js找出两个数组中不同的元素

热门文章

  1. office 打开wps乱_wps和office冲突怎么办
  2. 普通人也可以制作App
  3. 全国计算机等级考试怎么保存,全国计算机等级考试一级备考:Word文档保存为PDF文件...
  4. jQuery中的日期时间控件
  5. xy苹果助手安装_xy苹果助手
  6. Tableau:仪表板操作
  7. CAT3、CAT4、CAT5、CAT5E、CAT6、CAT6A、CAT7和CAT8网线的介绍
  8. 弹性板计算和板带划分计算_彻底搞懂板带的配筋及范围
  9. NB50/60 TJ1/TK1 模具 黑苹果保姆级教程整理
  10. python广州地图_广东省客户数量地图展示,如何通过python实现?