% 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,此命令用来保留控制多边形的图形;
k=1;
% 生成三次B样条函数
% 由于4个顶点可以确定一条B样条,共有17个控制顶点,可确定17-3=14条B样条曲线
for i=1:14
for u=0:0.001:1; % 参数u,[0,1]之间
% 生成样条基函数
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(k)=b0*a(1,i)+b1*a(1,i+1)+b2*a(1,i+2)+b3*a(1,i+3);% 确定曲线的横坐标x;
y(k)=b0*a(2,i)+b1*a(2,i+1)+b2*a(2,i+2)+b3*a(2,i+3); % 确定曲线的纵坐标y;
k=k+1;
%line(x,y,'Color','r'); % 绘制曲线坐标点;
hold on
end
end
% hold off;
% 生成二次B样条函数
% n=2;17对控制点,可以确定17-2=15条B样条曲线
for i=1:15
for t=0:0.001:1; % 参数u,[0,1]之间
% 生成样条基函数
g0=1/2*(t-1)^2; % 基函数g0;
g1=1/2*(-2*t^2+2*t+1); % 基函数g1;
g2=1/2*t^2; % 基函数g2;
% 曲线拟合
xx=g0*a(1,i)+g1*a(1,i+1)+g2*a(1,i+2); % 确定曲线的横坐标x;
yy=g0*a(2,i)+g1*a(2,i+1)+g2*a(2,i+2); % 确定曲线的纵坐标y;
line(x,y,'Color','g','LineStyle',':'); % 绘制曲线坐标点;
end
end
hold off;
- 1
- 2
前往页