前言
只是为方便学习,不做其他用途,记录matlab中Nurbs的使用,好像记得是添加的matlab中的一个Nurbs库来着。前一段使用,现在不记得了,使用这个程序得先安装好那个Nurbs库
安装Nurbs库可以参考博客 Matlab-NURBS工具箱简要教程及实例
一、简单例子
clear;
clc;
%% 直线
coef = [0.0 1.5; 0.0 3.0]; % 控制顶点
konts = [0.0 0.0 1.0 1.0]; % 节点向量
line = nrbmak(coef,konts); % nrbmak(coef,konts)--给定控制顶点和节点向量,构造NURBS结构
figure(1)
nrbplot(line, 2);
%% 平面
coefs = cat(3,[0 0; 0 1],[1 1; 0 1]); % 控制顶点
knots = {[0 0 1 1] [0 0 1 1]}; % 节点向量
plane = nrbmak(coefs,knots); % nrbmak(coef,konts)--给定控制顶点和节点向量,构造NURBS结构
figure(2)
nrbplot(plane, [2 2]);
%% 加载测试用的nurbs曲线
crv = nrbtestcrv; %加载测试用的nurbs曲线
rcrv=nrbreverse(crv); %反转
figure(3)
nrbplot(crv, 350);
%% 曲线
coef = [0.0 1.0 3.0 4.0; 0.0 2.50 2.0 0.0]; % 控制顶点
konts = [0 0 0 0.5 1 1 1]; % 节点向量
line2 = nrbmak(coef,konts); % nrbmak(coef,konts)--给定控制顶点和节点向量,构造NURBS结构
figure(4)
plot(coef(1,:),coef(2,:)); %画控制网格
hold on;
nrbplot(line2, 50); % nrbplot(NURBS结构, 画的点的个数);
二、复杂一点的NUrbs曲面
代码: |
%例子1
clear;clc;
% 控制顶点
pnts(:,:,1) =[2 3 4 5 6 7;
0 0 0 0 0 0;
4 4 4 4 4 4];
pnts(:,:,2) =[2 3 4 5 6 7;
1 1 1 1 1 1;
4 4 4.1 4 4 4];
pnts(:,:,3) =[2 3 4 5 6 7;
2 2 2 2 2 2;
4 4 4 4.2 4 4];
pnts(:,:,4)= [2 3 4 5 6 7;
3 3 3 3 3 3;
4 4 4.3 4 4 4];
pnts(:,:,5)= [2 3 4 5 6 7;
4 4 4 4 4 4;
4 4 4.4 4 4 4];
% 节点向量
knots{1} = [0 0 1/5 2/5 3/5 4/5 1 1]; %u
knots{2} = [0 0 1/4 2/4 3/4 1 1]; %v
plane = nrbmak(pnts,knots);
nrbplot(plane, [60 64]);
hold on;
for i = 1:5
a = plane.coefs(:,:,i);
plot3(a(1,:),a(2,:),a(3,:),'ro');
plot3(a(1,:),a(2,:),a(3,:));
end
% 两个单元的IGA
clear;clc;
%控制顶点
pnts(:,:,1) =[0 0 0 ;
0 1 2 ;
0 0 0 ];
pnts(:,:,2) =[0.5 0.5 0.5 ;
0 1 2 ;
0 0 0 ];
pnts(:,:,3) =[1.5 1.5 1.5 ;
0 1 2 ;
0 0 0 ];
pnts(:,:,4)= [2 2 2 ;
0 1 2 ;
0 0 0 ];
coefs = pnts;
%节点向量
knots = {[0 0 0 1 1 1] [0 0 0 0.5 1 1 1]};
plane = nrbmak(coefs,knots); %生成nurbs曲面
figure(2)
nrbplot(plane, [1 2]);
运行结果: |
nrbeval函数
crv = nrbtestcrv; %加载测试用的nurbs曲线
p1 = nrbeval(crv,ut); %参数域上ut 对应的x,y,z的坐标值
nrbplot(crv, 20);