📄 uniform3b.m
字号:
%============均匀三次B样条曲线插值===========
%定义变量:
%X:原始资料,d:控制顶点
%n:数据条数,k:B样条的次数
%/*======Copyright@时光牧者( http://hi.baidu.com/junus ).==========*/
%/*======Email: firt123@163.com ==============================*/
clc,clear;
figure;
X=load('data2.txt');
n=length(X); %得数据维数;
%A:方程系数-----------------------------
A=zeros(n+2);
A(1,1)=1;A(1,2)=-2;A(1,3)=1;
A(n+2,n)=1;A(n+2,n+1)=-2;A(n+2,n+2)=1;
for i=2:(n+1)
A(i,i-1)=1;
A(i,i)=4;
A(i,i+1)=1;
end
%e:方程右边.得到的控制点首尾与插值数据相同.且与控制首末连线相切
e=[0,0];
e(n+2,:)=[0,0];
for i=2:n+1
e(i,:)=6*X(i-1,:);
end
%得到控制点,
d=inv(A)*e;
%画出图形
hold on
%原始数据,红色,点
plot(X(:,1),X(:,2),'r');
%控制多边形,蓝色,线
% figure
% plot(d(:,1),d(:,2),'b');
% figure
%插值B样条曲线
uu=(0:0.01:1);
x=0;y=0;
for j=1:(n-1)
for kk=1:length(uu)
x(kk)=d(j,1)*Nfun(0,uu(kk))+d(j+1,1)*Nfun(1,uu(kk))+d(j+2,1)*Nfun(2,uu(kk))+d(j+3,1)*Nfun(3,uu(kk));
y(kk)=d(j,2)*Nfun(0,uu(kk))+d(j+1,2)*Nfun(1,uu(kk))+d(j+2,2)*Nfun(2,uu(kk))+d(j+3,2)*Nfun(3,uu(kk));
end
plot(x,y,'g');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -