⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniform3b.m

📁 关于样条插值均匀与非均匀的示例
💻 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 + -