代码如下
clear all
M = 512; %grid M*N
N = 32;
R = 10; %纱半径
L = 512; %单织长
Wav = 30; %最大值,最高
Rows = 10; %行数(纬纱数)
Colums = 15; %列数(经纱数)
num = 4.5;
H = 64;
%% 纱线定色模型 %%
tC1 = [.98 0.8 0.2]; %纬纱颜色
tC2 = [.2, 0.8 0.92]; %经纱颜色
c1 = zeros(M,N,3);
c2 = c1;
for j = 1:3 %三维纱线颜色网格化,逐渐变色
c1(:,1:N/2,j) = repmat(linspace(1,0.3,N/2)*tC1(j), M, 1);
c1(:,N/2+1:N,j) = repmat(linspace(0.3,1,N/2)*tC1(j), M, 1);
c2(:,1:N/2,j) = repmat(linspace(0.3,1,N/2)*tC2(j), M, 1);
c2(:,N/2+1:N,j) = repmat(linspace(1,0.3,N/2)*tC2(j), M, 1);
end
%% 编织模块 %%
stru = [0 1 1; 1 1 0; 1 0 1]; %斜纹 2/1 ↗
% stru = [0 0 1 1; 0 1 1 0; 1 1 0 0; 1 0 0 1]; %另一个斜纹 2/2 ↗
% stru = [0 0 0 1 0;0 1 0 0 0;0 0 0 0 1;0 0 1 0 0;1 0 0 0 0]; %5-end warp satin step 3
[r, c] = size(stru);
[x, y, z] = cylinder(ones(1,M)*R, N-1); %纱线的三维坐标矩阵
z = z*L;
%% 纱线屈曲模型 %%
t = linspace(0,2*pi*num,M);
a = 64;
b = 42;
x1 = zeros(1,M);
x1(end-M/2-a/2+1:end-M/2+a/2) = -(1:a)/a*b;
x1(end-M/2+a/2+1:end) = -b;
x1 = repmat(x1',1,N);
y1 = Wav*sin(t);
% y1 = [y1 y1];
y1 = repmat(y1',1,N);
% y1(M/2+1:end,:) = y1(M/2+1:end,:)+R;
%%
figure, hold on
mesh(z,y+y1+x1*5,x,c1)
% for i = 1:Rows %调用weave3d函数绘制每个编织单元
% for j = 1:Colums
% weave3d(x,y,z,c1,c2,f1,f2,[i-1 j-1], L, stru(mod(Rows-i,r)+1,mod(j-1,c)+1))
% end
% end
axis equal, axis off, hold off
运行结果如下

我需要将这个图形分成三部分,1和3两个部分是正弦形状,2这个部分是圆柱体。

最后运行出这样一个类似的图形
