• 在工程上往往需要进行三维曲线拟合，该Matlab代码可以对三组离散数据进行三维B样条曲线拟合
• % ref: 闭合 B 样条曲线控制点的快速求解算法及应用 % http://www.doc88.com/p-5714423317458.html % https://blog.csdn.net/liumangmao1314/article/details/54588155 ========================...
在做相关项目需要解决B样条插值问题，记录如下

感谢以下参考资料的帮助

% ref: 闭合 B 样条曲线控制点的快速求解算法及应用
% http://www.doc88.com/p-5714423317458.html
% https://blog.csdn.net/liumangmao1314/article/details/54588155

=============================

%计算B样条曲线控制点

function px = LU_B1(CPnum, V)
a = 1;
b = 4;
c = 1;
d = 1;
e = 1;

f = zeros(CPnum-1,1);
g = zeros(CPnum-2,1);
h = zeros(CPnum,1);
k = zeros(CPnum-1,1);

% get h[] & f[]
h(1) = b;
for i=1:CPnum-2
f(i) = a/h(i);
h(i+1) = b - f(i)*c;
end

% get g[] & f[n-1]
g(1) = d/h(1);
for i=1:CPnum-3
g(i+1) = -g(i)*c/h(i+1);
end
f(CPnum-1) = ( a-g(CPnum-2)*c )/h(CPnum-1);

% get k[] & h[n]
k(1) = e;
for i=1:CPnum-3
k(i+1) = -f(i)*k(i);
end
k(CPnum-1) = c - f(CPnum-2)*k(CPnum-2);

gksum = 0;
for i=1:CPnum-2
gksum = gksum + g(i)*k(i);
end
h(CPnum) = b - gksum - f(CPnum-1)*c;

% 矩阵求解过程，追的过程
x = zeros(CPnum,1);
x(1) = 6*V(end);

for i=1:CPnum-2
x(i+1) = 6*V(i) - f(i)*x(i);
end

gxsum = 0;

for i=1:CPnum-2
gxsum = gxsum + g(i)*x(i);
end

x(CPnum) = 6*V(CPnum-1) - gxsum - f(CPnum-1)*x(CPnum-1);

% 赶的过程
px = zeros(CPnum+2,1);

px(CPnum) = x(CPnum)/h(CPnum);
px(CPnum-1) = ( x(CPnum-1)-k(CPnum-1)*px(CPnum) )/h(CPnum-1);

for i=CPnum-2:-1:1
px(i) = ( x(i)-c*px(i+1)-k(i)*px(CPnum) )/h(i);
end
px(CPnum+1) = px(1);
px(CPnum+2) = px(2);
end

% 插值计算三次周期性b样条曲线
function p = Cubic_Bsp(u,x)
b(1) = ((1-u)^3)/6;
b(2) = (3*u^3-6*u^2+4)/6;
b(3) = (-3*u^3+3*u^2+3*u+1)/6;
b(4) = (u^3)/6;

p = x*b';
end

%test.m 测试

clear;clc
x = [-1;-1;1;1;0.2];
y = [1;-0.5;-1;1;0.8];
z = zeros(6,1);
z(3) = 1;

CPnum = size(x,1);

%x,y,z坐标分别计算B样条曲线控制点

px = LU_B1(CPnum, x);
py = LU_B1(CPnum, y);
pz = LU_B1(CPnum, z);

%首尾相连，曲线闭合

x(CPnum+1) = x(1);
y(CPnum+1) = y(1);
z(CPnum+1) = z(1);

figure;
plot3(x,y,z,'ro-');
hold on;
for i=1:CPnum%用这个循环
c=num2str(i);
c=[' ',c];
text(x(i),y(i),z(i),c)
%text(x(i),y(i),c)
end

plot3(px,py,pz,'g-');
for i=1:CPnum+1%用这个循环
c=num2str(i);
c=[' ',c];
text(px(i),py(i),pz(i),c)
plot3(px(i),py(i),pz(i),'*');
end

axis equal

px(CPnum+3) = px(3);
py(CPnum+3) = py(3);
pz(CPnum+3) = pz(3);

px(CPnum+4) = px(4);
py(CPnum+4) = py(4);
pz(CPnum+4) = pz(4);

%两点之间对10个点进行插值计算

nP = 10;
delta = 1.0/nP;
for j=1:CPnum
u = 0.0;
for i=1:nP

p = px';
Xi = p(j:j+3);
xx(i+(j-1)*nP) = Cubic_Bsp(u,Xi);
p = py';
Yi = p(j:j+3);
yy(i+(j-1)*nP) = Cubic_Bsp(u,Yi);

p = pz';
Zi = p(j:j+3);
zz(i+(j-1)*nP) = Cubic_Bsp(u,Zi);

u = u + delta;
end
end
xx(end+1) = x(1);
yy(end+1) = y(1);
zz(end+1) = z(1);
plot3(xx,yy,zz,'b--')

结果如图所示，红色为三维空间5个不共面点

绿色为B样条曲线控制点

蓝色为B样条拟合曲线


展开全文
• ## 三次B样条曲线拟合算法

万次阅读 多人点赞 2017-01-17 22:10:28
三次B样条曲线方程B样条曲线分为近似拟合和插值拟合，所谓近似拟合就是不过特征点，而插值拟合就是通过特征点，但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。...
1 三次B样条曲线方程
B样条曲线分为近似拟合和插值拟合，所谓近似拟合就是不过特征点，而插值拟合就是通过特征点，但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。首先介绍B样条的曲线方程。B样条曲线的总方程为：P(t)=∑i=0nPiFi,k(t)P(t)=\sum_{i=0}^{n} P_{i}F_{i,k}(t)    (1)
其中PiP_i是控制曲线的特征点，Fi,k(u)F_{i,k}(u)则是K阶B样条基函数。1.1 三次B样条曲线方程中基函数为：Fi,k(t)=1k!∑m=0k−i(−1)m(mk+1)(t+k−m−j)kF_{i,k}(t)=\frac{1}{k!}\sum_{m=0}^{k-i}(-1)^{m}\binom{m}{k+1}(t+k-m-j)^k  (2)
其中(mk+1)\binom{m}{k+1}表示阶乘，化成看的明白的式子就是：
（
将图片上的基函数代入到方程（1）中，就是：P(t)=P0∗F0,3(t)+P1∗F1,3(t)+P2∗F2,3(t)+P3∗F3,3(t)P(t)= P_0*F_{0,3}(t)+P_1*F_{1,3}(t)+P_2*F_{2,3}(t)+P_3*F_{3,3}(t)  (3)
方程（3）就是三次B样条曲线方程。

2019-04-18 更新

有小伙伴提到上式(2)的j是什么意思，其实j就是控制点的索引值。这里我把书上的公式摘抄下来，可能看起来更为清晰。
参考书籍：《计算机图形学 第3版》何援军 第13章三次B样条曲线计算F0,3(t)=13!∑j=03(−1)jC4j)(t+3−0−j)3F_{0,3}(t)=\frac{1}{3!}\sum_{j=0}^{3}(-1)^{j}C^{j}_{4})(t+3-0-j)^3
=16[(−1)0C40(t+3)3+(−1)1C41(t+2)3+(−1)2C42(t+1)3+(−1)3C43t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+3)^{3}+(-1)^{1}C^{1}_{4}(t+2)^{3}+(-1)^{2} C^{2}_{4}(t+1)^{3}+(-1)^{3}C^{3}_{4}t^{3}]
=16(−t3+3t2−3t+1)=16(1−t)3=\frac{1}{6}(-t^{3}+3t^{2}-3t+1)=\frac{1}{6}(1-t)^{3}
F1,3(t)=13!∑j=02(−1)jC4j)(t+3−1−j)3F_{1,3}(t)=\frac{1}{3!}\sum_{j=0}^{2}(-1)^{j}C^{j}_{4})(t+3-1-j)^3
=16[(−1)0C40(t+2)3+(−1)1C41(t+1)3+(−1)2C42t3]=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+2)^{3}+(-1)^{1}C^{1}_{4}(t+1)^{3}+(-1)^{2} C^{2}_{4}t^{3}]
=16(3t3−6t2+4)=\frac{1}{6}(3t^{3}-6t^{2}+4)
F2,3(t)=13!∑j=01(−1)jC4j)(t+3−2−j)3F_{2,3}(t)=\frac{1}{3!}\sum_{j=0}^{1}(-1)^{j}C^{j}_{4})(t+3-2-j)^3
=16[(−1)0C40(t+1)3+(−1)1C41t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}(t+1)^{3}+(-1)^{1}C^{1}_{4}t^{3}
=16(−3t3+3t2+3t+1)=\frac{1}{6}(-3t^{3}+3t^{2}+3t+1)
F3,3(t)=13!∑j=00(−1)jC4j)(t+3−3−j)3F_{3,3}(t)=\frac{1}{3!}\sum_{j=0}^{0}(-1)^{j}C^{j}_{4})(t+3-3-j)^3
=16[(−1)0C40t3=\frac{1}{6}[(-1)^{0}C^{0}_{4}t^{3}
=16t3=\frac{1}{6}t^{3}
2 三次B样条曲线近似拟合
近似拟合很简单。不需要求控制点，求得Fi,k(t)F_{i,k}(t)，由上述方程（3），代入P0,P1,P2,P3P_0,P_1,P_2,P_3就可以得到由这四个点近似拟合的一段三次B样条曲线，起始点在P0P_0，终点在P1P_1，对于闭合轮廓，最后一段可以取前两点做辅助，拟合实验结果我最后一块给出。这种近似拟合曲线光滑，但是最大不足就是不过特征点，也就是不过PiP_i，需要过点需要反求控制点再拟合。
3 三次B样条插值拟合
插值拟合较为复杂。其实也不算是很复杂，找资料过程和理解过程是一个复杂的过程。不过有了前面大神做工作，我们只是借用别人的成果写代码就好了。我给大家看一篇论文，大家可以百度或者去知网搜索，闭合 B 样条曲线控制点的快速求解算法及应用。文章讲解了反求控制点的具体步骤，写的非常详细，基本上贴近代码的那种。大家可以根据这篇论文反求控制点，拟合出来的三次B样条曲线是经过PiP_i的。代码就不放了，很多，可以根据我给的那篇论文直接编写相应代码，有问题可以私信我，知无不言。
##4 拟合结果    原轮廓   近似拟合轮廓。可以看到没过黑色特征点，只是近似拟合  插值拟。可以看到曲线经过黑色特征点，不过有一些不足之处。
##5 总结
三次B样条曲线拟合轮廓效果还是可以，较之Beizer（可以参考我博客三次Beizer曲线拟合算法），B样条将一些细节描述的很好，很多细节之处都贴近原轮廓，但是有一些不足之处，可以看到对直线拟合效果不是很好。两篇博客都是关于闭合轮廓的拟合，对于非闭合或者只是一段曲线拟合，还有一种曲线是很好的，《数值分析》提到过，叫三次样条插值拟合，拟合效果很好，我做过拟合一元三次方程曲线，拟合效果跟原曲线非常贴近，不过过程中需要用到追赶法，而追赶法需要满足一个条件，对于闭合曲线三次样条插值是不满足这个条件的，所以我没去深研究，大家可以去试一试。谢谢大家！
-------------------------------------------------2018-10-30--------------------------------------------
真的很感谢大家的支持，这一年都比较忙，找实习and找工作，而且这个东西是研一上学期搞的，现在看都毫无印象，对自己说一句：牛逼。我把代码放在网盘了（能运行，但现在没效果，大家可以检查下，之前是OK的），本来想上传到CSDN，好像要C币，而且要审核，太墨迹了。
链接: https://pan.baidu.com/s/1mSQMmvL71gwEAqgiT6O9Gg 提取码: xv5f


展开全文
• 例程： x = [1:20]; y = [42 45 47 49 52 59 66 74 85 98 ...其中：(x,y)为离散的数据点，spapi(3,x,y)表示用3阶B样条曲线对离散的数据点进行拟合，并且要经过给定的离散数据点，fnplt(sp)代表画出该B样条曲线。 ...
1.拟合出的曲线通过离散的路径点
x= [0;0.0128205128205128;0.0256410256410256;0.0384615384615385;0.0512820512820513;0.0641025641025641;0.0769230769230769;0.0897435897435897;0.102564102564103;0.115384615384615;0.128205128205128;0.141025641025641;0.153846153846154;0.166666666666667;0.179487179487180;0.192307692307692;0.205128205128205;0.217948717948718;0.230769230769231;0.243589743589744;0.256410256410256;0.269230769230769;0.282051282051282;0.294871794871795;0.307692307692308;0.320512820512821;0.333333333333333;0.346153846153846;0.358974358974359;0.371794871794872;0.384615384615385;0.397435897435897;0.410256410256410;0.423076923076923;0.435897435897436;0.448717948717949;0.461538461538462;0.474358974358974;0.487179487179487;0.500000000000000;0.512820512820513;0.525641025641026;0.538461538461538;0.551282051282051;0.564102564102564;0.576923076923077;0.589743589743590;0.602564102564103;0.615384615384615;0.628205128205128;0.641025641025641;0.653846153846154;0.666666666666667;0.679487179487180;0.692307692307692;0.705128205128205;0.717948717948718;0.730769230769231;0.743589743589744;0.756410256410256;0.769230769230769;0.782051282051282;0.794871794871795;0.807692307692308;0.820512820512821;0.833333333333333;0.846153846153846;0.858974358974359;0.871794871794872;0.884615384615385;0.897435897435898;0.910256410256410;0.923076923076923;0.935897435897436;0.948717948717949;0.961538461538462;0.974358974358974;0.987179487179487;1]
y = [0;0;-0.00210988000000000;-0.00115278000000000;-0.000152780000000000;0.00281970000000000;0.00381978000000000;0.00483972000000000;0.00793453000000000;0.0115414000000000;0.0133153000000000;0.0146549000000000;0.0157498000000000;0.0166018000000000;0.0172609000000000;0.0176989000000000;0.0179270000000000;0.0179989000000000;0.0179386000000000;0.0178000000000000;0.0176083000000000;0.0174145000000000;0.0172459000000000;0.0171472000000000;0.0171085000000000;0.0171238000000000;0.0171999000000000;0.0173190000000000;0.0174359000000000;0.0175483000000000;0.0176107000000000;0.0175886000000000;0.0174669000000000;0.0172009000000000;0.0166578000000000;0.0158427000000000;0.0146909000000000;0.0132764000000000;0.0114232000000000;0.00985331000000000;0.00798939000000000;0.00573892000000000;0.00300738000000000;0;-0.00443505000000000;-0.00944156000000000;-0.0155150000000000;-0.0228853000000000;-0.0318467000000000;-0.0427468000000000;-0.0560513000000000;-0.0721688000000000;-0.0913496000000000;-0.113515000000000;-0.137977000000000;-0.162830000000000;-0.185098000000000;-0.201125000000000;-0.207564000000000;-0.203193000000000;-0.189337000000000;-0.169244000000000;-0.146676000000000;-0.123783000000000;-0.102184000000000;-0.0817261000000000;-0.0612605000000000;-0.0395437000000000;-0.0159423000000000;0.00880633000000000;0.0333237000000000;0.0563616000000000;0.0781288000000000;0.101801000000000;0.130293000000000;0.157632000000000;0.171608000000000;0.180132000000000;0.172427000000000]
sp = spapi(3,x,y);
fnplt(sp);

其中：(x,y)为离散的数据点；spapi(3,x,y)表示用3阶B样条曲线对离散的数据点进行拟合，并且要经过给定的离散数据点；fnplt(sp)代表画出该B样条曲线。
结果如下图：

2.拟合后的曲线进行了平滑但不一定过数据点
x= [0;0.0128205128205128;0.0256410256410256;0.0384615384615385;0.0512820512820513;0.0641025641025641;0.0769230769230769;0.0897435897435897;0.102564102564103;0.115384615384615;0.128205128205128;0.141025641025641;0.153846153846154;0.166666666666667;0.179487179487180;0.192307692307692;0.205128205128205;0.217948717948718;0.230769230769231;0.243589743589744;0.256410256410256;0.269230769230769;0.282051282051282;0.294871794871795;0.307692307692308;0.320512820512821;0.333333333333333;0.346153846153846;0.358974358974359;0.371794871794872;0.384615384615385;0.397435897435897;0.410256410256410;0.423076923076923;0.435897435897436;0.448717948717949;0.461538461538462;0.474358974358974;0.487179487179487;0.500000000000000;0.512820512820513;0.525641025641026;0.538461538461538;0.551282051282051;0.564102564102564;0.576923076923077;0.589743589743590;0.602564102564103;0.615384615384615;0.628205128205128;0.641025641025641;0.653846153846154;0.666666666666667;0.679487179487180;0.692307692307692;0.705128205128205;0.717948717948718;0.730769230769231;0.743589743589744;0.756410256410256;0.769230769230769;0.782051282051282;0.794871794871795;0.807692307692308;0.820512820512821;0.833333333333333;0.846153846153846;0.858974358974359;0.871794871794872;0.884615384615385;0.897435897435898;0.910256410256410;0.923076923076923;0.935897435897436;0.948717948717949;0.961538461538462;0.974358974358974;0.987179487179487;1]
y = [0;0;-0.00210988000000000;-0.00115278000000000;-0.000152780000000000;0.00281970000000000;0.00381978000000000;0.00483972000000000;0.00793453000000000;0.0115414000000000;0.0133153000000000;0.0146549000000000;0.0157498000000000;0.0166018000000000;0.0172609000000000;0.0176989000000000;0.0179270000000000;0.0179989000000000;0.0179386000000000;0.0178000000000000;0.0176083000000000;0.0174145000000000;0.0172459000000000;0.0171472000000000;0.0171085000000000;0.0171238000000000;0.0171999000000000;0.0173190000000000;0.0174359000000000;0.0175483000000000;0.0176107000000000;0.0175886000000000;0.0174669000000000;0.0172009000000000;0.0166578000000000;0.0158427000000000;0.0146909000000000;0.0132764000000000;0.0114232000000000;0.00985331000000000;0.00798939000000000;0.00573892000000000;0.00300738000000000;0;-0.00443505000000000;-0.00944156000000000;-0.0155150000000000;-0.0228853000000000;-0.0318467000000000;-0.0427468000000000;-0.0560513000000000;-0.0721688000000000;-0.0913496000000000;-0.113515000000000;-0.137977000000000;-0.162830000000000;-0.185098000000000;-0.201125000000000;-0.207564000000000;-0.203193000000000;-0.189337000000000;-0.169244000000000;-0.146676000000000;-0.123783000000000;-0.102184000000000;-0.0817261000000000;-0.0612605000000000;-0.0395437000000000;-0.0159423000000000;0.00880633000000000;0.0333237000000000;0.0563616000000000;0.0781288000000000;0.101801000000000;0.130293000000000;0.157632000000000;0.171608000000000;0.180132000000000;0.172427000000000]
w = ones(size(x)); w([1 end]) = 100;
sp = spaps(x,y, 1.e-2, w, 3);
fnplt(sp);

其中：(x,y)为离散的数据点；spaps(x,y, 1.e-2, w, 3)表示用B样条曲线对离散的数据点进行平滑拟合，不一定经过给定的离散数据点，1.e-2为允许的拟合误差，w向量第一个分量和最后一个分量为100，其余为1，代表拟合后的起点和终点与数据点必须很接近。
结果如下图：

从曲线的最低点可看出，其与原数据点存在较大的偏差。
如果将1.e-2改为1.e-5，可得：

可以看出，上图更接近于原始的数据点。
附：样条工具箱函数

三次样条函数
csapi 插值生成三次样条函数
csape 生成给定约束条件下的三次样条函数
csaps 平滑生成三次样条函数
cscvn 生成一条内插参数的三次样条曲线
getcurve 动态生成三次样条曲线

分段多项式样条函数
ppmak 生成分段多项式样条函数
ppual 计算在给定点处的分段多项式样条函数值

B样条函数
spmak 生成B样条函数
spcrv 生成均匀划分的B样条函数
spapi 插值生成B样条函数
spap2 用最小二乘法拟合生成B样条函数
spaps 对生成的B样条曲线进行光滑处理
spcol 生成B样条函数的配置矩阵

有理样条函数
rpmak 生成有理样条函数
rsmak 生成有理样条函数

样条操作函数
fnval 计算在给定点处的样条函数值
fmbrk 返回样条函数的某一部分（如断点或系数等）
fncmb 对样条函数进行算术运算
fn2fm 把一种形式的样条函数转化成另一种形式的样条函数
fnder 求样条函数的微分(即求导数)
fndir 求样条函数的方向导数
fnint 求样条函数的积分
fnjmp 在间断点处求函数值
fnplt 画样条曲线图
fnrfn 在样条曲线中插入断点。
fntlr 生成tarylor系数或taylor多项式

样条曲线端点和节点处理函数
augknt   在已知节点数组中添加一个或多个节点
aveknt   求出节点数组元素的平均值
brk2knt 增加节点数组中节点的重次
knt2brk 从节点数组中求得节点及其重次
knt2mlt 从节点数组中求得节点及其重次
sorted   求出节点数组的元素在另一节点数组中属于第几个分量
aptknt   求出用于生成样条曲线的节点数组
newknt   对分段多项式样条函数进行重分布
optknt   求出用于内插的最优节点数组
chbpnt   求出用于生成样条曲线的合适节点数组


展开全文
• I am trying to estimate missing values in time-series data which is in the form of a matrix. The columns represent the time points,i... Now, I want to fit each row of the matrix to a B-Spline, and use...
I am trying to estimate missing values in time-series data which is in the form of a matrix. The columns represent the time points,i.e. Now, I want to fit each row of the matrix to a B-Spline, and use it to estimate the missing values. I could fit the data to a normal spline using MATLAB, but I am completely stuck at trying to figure out how to fit the data to create a B-Spline. Using the default bspline function in the Curve Fitting Toolbox lets me set the knot vector to the vector of time points, but I cannot set the control points, i.e. the elements of the row.Any help would be much appreciated.EDIT: EXAMPLE ADDEDThe time-series data has rows that look like this:-0.11    0.1    0.01    0.06    0.04   -0.26    0.04    0.19   -0.22    -0.2    0.12    0.21    -0.26    -0.3    0.22    0.58    -0.36    0.13My knot vector is basically the time points, and it looks like this:0     7    14    21    28    35    42    49    56    63    70    77    84    91    98   105   112   119Basically I want to use each row along with the knot vector to construct a B-Spline.解决方案what about these?
展开全文
• %hg为x和y拟合的系数，16行， %第1，2行分别为第一段x，y的系数，3，4为第二段，类推 plot(x,y) hold on plot([xx(i+1),xx(i+2)],[yy(i+1),yy(i+2)]) hold on end 结果 方程参数为hg 第一行所有为第一个方程横坐标x...
• 对多个点组成的数组进行插值拟合，在折点处得到光滑的曲线
• 直接上代码，多的不再说了...%------------------非均匀B样条拟合MATLAB程序----------------- clear k=3; x=load('data.txt'); [n,m]=size(x); %-----------弦长参数化-------------------------------------- u(k...
• ## MATLAB绘制B样条曲线

万次阅读 多人点赞 2015-05-09 18:50:42
1 B样条曲线1.1 B样条曲线定义B样条方法具有表示与设计自由型曲线曲面的强大功能，是形状数学描述的主流方法之一，另外B样条方法是目前工业产品几何定义国际标准——有理B样条方法(NURBS)的基础。B样条方法兼备了...
• 三维B样条曲线matlab实现，代码已通过调试，可直接改变控制点，绘制所需的B样条曲线
• B样条曲线逼近代码，是matlab代码，B样条曲线逼近代码，是matlab代码，B样条曲线逼近代码，是matlab代码，B样条曲线逼近代码，是matlab代码，
• [2]（这个介绍只有两个插值点的三次B样条曲线，是B样条曲线最简单的形式了吧~）(7条消息) 从B样条的插值点反求控制点_cofd的专栏-CSDN博客 [3]（一本书，里面有讲到整体参数和局部参数设置、节点矢量划分等）...
• [2]（这个介绍只有两个插值点的三次B样条曲线，是B样条曲线最简单的形式了吧~）(7条消息) 从B样条的插值点反求控制点_cofd的专栏-CSDN博客 [3]（一本书，里面有讲到整体参数和局部参数设置、节点矢量划分等）...
• 简单详细的均匀三次B样条曲线插值MATLAB代码，有注释
• 1.B-样条曲线教程（B-spline Curves Notes）目录 2.运动规划——B样条曲线 3.B样条曲线（B-spline Curves） 4.基于B样条曲线的路径规划（含matlab代码） 5.B样条曲线拟合原理
• ## 二次与三次B样条曲线c++实现

万次阅读 多人点赞 2019-08-31 21:26:40
B样条曲线构建一条平滑曲线，接近而不通过控制点（首尾点除外）。如图 B样条曲线从Bezier曲线演变而来，了解B样条曲线首先得了解Bezier曲线。对于平面上的三个点P0，P1，P2，其坐标分别是(x0,y0)、(x1,y1)、(x2...
• 这个程序是一个我做的一个简单的B样条曲线的演示程序。用在我的一篇科普入门向的博客中。
• MATLAB样条工具箱可以通过节点获得样本函数值，但不能根据x求y或z，也不能求得样本曲线方程。例如：ctrlpoints=[0 -1.2 -1.6 -1.4-1 -0.5 -0.35 -0.6-1.6-0.2 -0.5 -1 -1.5-2.2 -2.7 -3.2 -3.7 -4.2];knots=[0 0 0 0...
• 三次均匀有理B样条插值曲线拟合原创-myselfB.m 三次均匀有理B样条插值拟合 通过四重节点办法算出控制点坐标，根据控制点拟合通过型值点的3次B样条曲线
• 样条拟合： - 基于B样条曲线拟合工具- ppform 上的样条（分段多项式） - 任何样条顺序（默认三次样条） - 周期性边界条件- 函数值和导数的线性约束- 稳健的拟合方案- 以与 SPLINE 相同的方式在 ND 阵列上运行- ...
• 对于形如y = a + bx + c * x^2 + d * x^3 的三次spline曲线拟合的数学原理，我就不多说了。 我接了一个图给大家看看： 数值计算的伪代码如下： 书名是：numerical_methods_for_engineers_for_engineers_chapra_...
• 三次均匀B样条，一阶导数，二阶导数程序的matlab程序，三个文件独立分开 。
• ## 均匀B样条和准均匀B样条

千次阅读 多人点赞 2019-03-20 11:14:06
均匀B样条拟合和准均匀B样条...B样条曲线按照节点矢量中节点的分布情况不同，可划分为如下4种类型：(a)均匀B样条曲线; (b)准均匀B样条曲线; ©分段Bezier曲线; (d)一般非均匀B样条曲线。 (1) 对于均匀B样条曲...
• 采用matlab实现NURBS逼近曲线拟合，利用app designer实现拟合的界面，辅助验证各种方法。文中主要是自己实现写的算法，可以得到逼近曲线，以及进行曲线性能的简单评判。 文中只简单介绍了一些理论，也是个人的...
• ## MATLAB拟合曲线

千次阅读 2016-08-03 21:28:49
今天想帮朋友做一个简单的数据拟合，然后画图，结果发现网上都没有现成的模板，只能自己摸索了，最后搜到了一个简单的方法，将多条曲线放到一个图上。 以下是数据：X1 = 0 0.8800 4.0000 1.0400 8.0000 1.0200 ...
• 基于三次准均匀B样条曲线拟合的原理,介绍了采用三次准均匀B样条插值求解的方法在三维地形数据拟合中应用的实际问题,并基于MATLAB编程实现了三维地形数据的网格化,为三维地形的重建奠定了基矗

...

matlab 订阅