######用matlab中nurbs工具箱绘制曲面
clc;clear;
% 定义控制点和权重
P = [0 0 0; 1 0 0; 2 1 0; 0 1 1; 1 1 1; 2 2 1];
w = [1 1 1 1 1 1];
% 定义节点向量
knots = [0 0 0 1 1 1];
% 定义曲面的次数
p = 2;
q = 2;
% 创建nurbs曲面结构体
nurbs_surface.form = 'B-NURBS';
nurbs_surface.dim = 3;
nurbs_surface.number = [p+1 q+1];
nurbs_surface.coefs = P;
nurbs_surface.knots = {knots knots};
nurbs_surface.order = [p+1 q+1];
nurbs_surface.weights = w;
% 生成曲面的参数值
u = linspace(0, 1, 100);
v = linspace(0, 1, 100);
[U, V] = meshgrid(u, v);
% 计算曲面上的点坐标
X= nrbeval(nurbs_surface, {U, V});
% 将计算得到的点坐标重新转换为网格形式
X = reshape(X(:,1),[],size(U));
% 绘制曲面
surf(X(:,:,1), X(:,:,2), X(:,:,3));
错误使用 reshape
要执行 RESHAPE,请勿更改元素数目。
出错 nrbeval (line 86)
val = reshape(nurbs.coefs,4*num1,num2);
出错 z11 (line 23)
X= nrbeval(nurbs_surface, {U, V});