• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签:

资源简介

对多个点组成的数组进行插值拟合,在折点处得到光滑的曲线

资源截图

代码片段和文件信息

% B样条曲线生成程序
% 说明:给定8个控制顶点{(3 5)(2 4)(3 2)(6 1)(5 8)(10 6)(8 1)(6 0)}
%load c;x=800:25:1800;
%a(1:)=x;a(2:)=c;
clc;clear;close all;
%  选取17个控制点,第一行为行,第二行为列
a=[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90;
    20 16 26 26 26 26 24 24 24 22 22 16 28 26 26 26 24]; % 控制顶点数组
%a=[4 3 2 3 6 5 10 8 6 4;6 5 4 2 1 8 6 1 0 -1];%增加两个控制顶点(4 6)(4 -1)从而使曲线通过原来的首末点
plot(a(1:)a(2:)); % 绘制控制多边形
hold on; % 默认为hold off,此命令用来保留控制多边形的图形;

% 生成三次B样条函数
% 由于4个顶点可以确定一条B样条,共有17个控制顶点,可确定17-3=14条B样条曲线
for i=1:14
    for u=0:0.001:1; % 参数u[01]之间
        % 生成样条基函数
        b0=1/6*(-u^3+3*u^2-3*u+1);        % 基函数b0;
        b1=1/6*(3*u^3-6*u^2+4);          % 基函数b1;
        b2=1/6*(-3*u^3+3*u^2+3*u+1);      % 基函数b2;
        b3=1/6*u^3;                       % 基函数b3;
        
        % 曲线拟合
        x=b0*a(1i)+b1*a(1i+1)+b2*a(1i+2)+b3*a(1i+3); % 确定曲线的横坐标x;
        y=b0*a(2i)+b1*a(2i+1)+b2*a(2i+2)+b3*a(2i+3); % 确定曲线的纵坐标y;
        line(xy‘Color‘‘r‘‘Linestyle‘‘--‘); % 绘制曲线坐标点;
    end
end
% hold off;

% 生成二次B样条函数
% n=2;17对控制点,可以确定17-2=15条B样条曲线
for i=1:15
    for t=0:0.001:1; % 参数u[01]之间
        % 生成样条基函数
        g0=1/2*(t-1)^2;                 % 基函数g0;
        g1=1/2*(-2*t^2+2*t+1);          % 基函数g1;
        g2=1/2*t^2;    % 基函数g2;
        
        % 曲线拟合
        x=g0*a(1i)+g1*a(1i+1)+g2*a(1i+2); % 确定曲线的横坐标x;
        y=g0*a(2i)+g1*a(2i+1)+g2*a(2i+2); % 确定曲线的纵坐标y;
        line(xy‘Color‘‘g‘‘Linestyle‘‘:‘); % 绘制曲线坐标点;
    end
end
hold off;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1776  2012-12-22 13:36  2次B样条曲线和3次B样条曲线的matlab绘制,适用于初学者\TestBSpline.m
     目录           0  2018-05-21 10:27  2次B样条曲线和3次B样条曲线的matlab绘制,适用于初学者\基础B-Spline\
     文件        1776  2012-12-22 13:36  2次B样条曲线和3次B样条曲线的matlab绘制,适用于初学者\基础B-Spline\TestBSpline.m
     目录           0  2018-05-21 10:27  2次B样条曲线和3次B样条曲线的matlab绘制,适用于初学者\

评论

共有 条评论