B样条究竟是干啥的?白话就是给出一堆点,用样条的方式,给这些点连接起来,并保证丝滑的。
同时B样条分为准均匀和非均匀,以下为准均匀为例。
参考链接1:https://zhuanlan.zhihu.com/p/50626506https://zhuanlan.zhihu.com/p/50626506
参考链接2:
https://zhuanlan.zhihu.com/p/536470972https://zhuanlan.zhihu.com/p/536470972参考链接3:
8.6.2 B样条曲线类型划分_哔哩哔哩_bilibili8.6.2 B样条曲线类型划分是计算机图形学bezier曲线曲面B样条曲线曲面的第25集视频,该合集共计27集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1Dt411f7Qj?p=25&vd_source=c0f0446e22649eeb5ab253cb77c744c7
参考链接4:B样条基函数递推定义_哔哩哔哩_bilibiliB样条基函数递推定义, 视频播放量 6278、弹幕量 2、点赞数 101、投硬币枚数 55、收藏人数 182、转发人数 33, 视频作者 孔令德, 作者简介 一生只做一把壶,相关视频:B样条的定义de boor-cox公式的理解,均匀与准均匀B样条曲线,B样条曲线原理演示,计算机图形学全套算法讲解和C++编码实现(共23讲配套源码)_将国家级一流课程从线下搬到线上,B样条曲面算法,NURBS曲线算法,非均匀B样条曲线算法,MFC绘制二维图形-国家级一流课程,B样条测量工具,NURBS曲面算法https://www.bilibili.com/video/BV1hM4y1w7sX/?spm_id_from=333.337.search-card.all.click&vd_source=c0f0446e22649eeb5ab253cb77c744c7
参考链接5:
【作业杂谈】B样条曲线的公式要怎么理解(附代码)_哔哩哔哩_bilibili录完视频感觉漏了不少没讲。因为录视频的时候总想着不要停,于是就容易忘事。补充一下:节点数=控制点数+阶数(阶数=次数+1,分段数=控制点数-次数)那么多节点里面只有分段数个点是会被赋值1的(相当于第一层的N_i,k),从第(阶数)个点开始的(分段数)个点。其他都是为了防止公式计算时下标溢出的凑数点。按我的方法是k从小往大,每个位置分成两块传递给下一层,而不是公式里的k从大往小递归。这样比较好理解。, 视频播放量 3648、弹幕量 0、点赞数 38、投硬币枚数 18、收藏人数 86、转发人数 4, 视频作者 猪星人, 作者简介 这个人懒死了,就改了一下签名,相关视频:【研究生进度-10】曲线拟合——根据目标曲线拟合出贝塞尔曲线控制点坐标(附MATLAB代码),【数学建模编程手必看】41种数模国赛常用算法-matlab代码,免费分享领取,首发—手把手介绍如何将理论应用到matlab代码,手把手教你Boost升压电路的Simulink仿真(含开环,闭环,双闭环控制,PI参数调节方法),【数模国赛神器】Matlab一键生成数学建模代码?Matlab APP/工具箱的妙用!!,6、基于随机森林的时间序列预测模型-预测未来新数据代码详细教程,【MBD 篇】嵌入式 MCU 通用代码生成流程 1,他是真的想教会我们MATLAB机器学习入门到进阶!MATLAB科学计算全套教程!深度学习、神经网络、灰色预测编程实现,【最强动画直观理解强化学习】强化学习训练走路的机器人!不愧是MATLAB官方教程,行走机器人/深度学习/AI/人工智能,看完一年能水5篇SCI!B站公认最好的【SCI论文写作教程】26讲全!基本套路+实操演示,包含所有干货内容!https://www.bilibili.com/video/BV11Y4y1S78q/?spm_id_from=333.337.search-card.all.click&vd_source=c0f0446e22649eeb5ab253cb77c744c7
参考链接6:
B样条曲线,希望这个视频可以帮助到你我(希望大家看过的多多提意见,我也是自己初学)_哔哩哔哩_bilibiliB样条曲线,拉格朗日插值定理,贝塞尔曲线, 视频播放量 6474、弹幕量 33、点赞数 143、投硬币枚数 97、收藏人数 235、转发人数 22, 视频作者 颈椎病goaway, 作者简介 提升自己,教育好宝贝,然后致力于躺平,相关视频:计算机图形学bezier曲线曲面B样条曲线曲面,样条基础知识,基于matlab的三次B样条曲线插值(开、闭曲线),为什么要使用样条曲线?,B样条基函数递推定义,NURBS详解,R语言中的多项式回归、B样条曲线(B-spline Curves)回归,B样条的定义de boor-cox公式的理解,「几何引擎基础课03」B样条/Bezier曲线/NURBS曲面-李华研究员,均匀与准均匀B样条曲线https://www.bilibili.com/video/BV1T24y1s7JE/?spm_id_from=333.337.search-card.all.click&vd_source=c0f0446e22649eeb5ab253cb77c744c7
具体的原理我在这里不进行详细讲解,比如Lagrange插值,Runge现象等等,上面的文章讲解的就非常详细。总得来说B样条是贝塞尔曲线的一部分,类似。这篇文章的重点是如何使用,B样条最终的公式是:
但是这里还是要说一下,最基本的东西,对于b样条来说
阶数:函数最高阶数(二次样条就是2,用3次样条是3)
节点(数)向量:阶数+控制点数+1
(这里的阶数可以改的,比如用二次样条就是2,用3次样条是3)
基本函数: 基本函数就是Ni,k(t),这个怎么看呢,看下面的这个表
已知节点数为10, 有5个控制点,根据公式为5 + 4 + 1 = 10 ,也就是最好可以用4次样条。(9组范围)根据图片所示,当使用4次样条的话,要有5组基函数。当然也可以是使用3次样条来解决这个问题,那么需要6个控制点,6 + 3 +1 = 10,也就是说当使用3次样条的话,需要6个基函数。
好了,来一个实例,就能明白怎么使用了,以上的公式了。
均匀B样条:
有4个控制点p1,p2,p3,p4 ,利用3次B样条曲线。进行求解。
采用均匀节点向量 t = [0,1,2,3,4,5,6,7],节点向量个数等于4+3+1共8个。
因为使用的3次B样条,所以最终要求的是
之后我们要依次求零次基函数,一次基函数,二次基函数,三次基函数。 一阶函数
其他的N11,N21,N31,N02,N12,N22,N32,N03,N13,N23,N33。就可以得到3次B样条的表达式。
准均匀B样条:
有4个控制点p1,p2,p3,p4 ,利用3次B样条曲线。进行求解。
采用准均匀节点向量 t = [0,0,0,0,,5,6,7],节点向量个数等于4+3+1共8个。
其他的也是类似的:
其他的N11,N21,N31,N02,N12,N22,N32,N03,N13,N23,N33。就可以得到3次B样条的表达式。
clear all;
close all;
clc;
p =ginput(); %至少点五个点,因为下面有四次样条
plot(p(:,1),p(:,2),'k-o');
%二次均匀b样条
re2=[];
for i=1:length(p)-2
for t=0:0.01:1
b0 = 1/2*(1-t)^2;
b1 = 1/2*(-2*t^2+2*t+1);
b2 = 1/2*t^2;
x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1);
y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2);
re2=[re2;x y];
end
end
%三次均匀b样条
re3=[];
for i=1:length(p)-3
for t=0:0.01:1
b0=1/6*(1-t)^3;
b1=1/6*(3.*t^3-6*t^2+4);
b2=1/6*(-3*t^3+3*t^2+3*t+1);
b3=1/6*t^3;
x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1)+b3*p(i+3,1);
y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2)+b3*p(i+3,2);
re3=[re3;x y];
end
end
%四次均匀b样条
re4=[];
for i=1:length(p)-4
for t=0:0.01:1
b0=1/24*(t^4-4*t^3+6*t^2-4*t+1);
b1=1/24*(-4*t^4+12*t^3-6*t^2-12*t+11);
b2=1/24*(6*t^4-12*t^3-6*t^2+12*t+11);
b3=1/24*(-4*t^4+4*t^3+6*t^2+4*t+1);
b4=1/24*t^4;
x=b0*p(i,1)+b1*p(i+1,1)+b2*p(i+2,1)+b3*p(i+3,1)+b4*p(i+4,1);
y=b0*p(i,2)+b1*p(i+1,2)+b2*p(i+2,2)+b3*p(i+3,2)+b4*p(i+4,2);
re4=[re4;x y];
end
end
hold on;
plot(re2(:,1),re2(:,2),'r');
plot(re3(:,1),re3(:,2),'g');
plot(re4(:,1),re4(:,2),'b');
同时要保证其在各个连接点保持平滑,那么以二次样条为例:
三次: