登录论坛

查看完整版本 : [MATLAB图像处理] 求助:我想要圆柱体的二维投影图,这里有我的MATLAB圆柱体程序。


Thinklad
2009-06-25, 09:58
我有一个三维圆柱体图,想要它 的二维投影图,然后通过二维投影图重建出三维图像。希望有人指点迷津。非常感谢。
程序:
clear all
close
clc
[X,Y,Z] = cylinder([0.5 0.5], 50);
Z=zeros(1, length(X)) - 30;
Y=Y(1,: );
X=X(1,: );
for j = 1 : 12
Z = [Z; (j*10-30)*ones(1,length(X))];
[X_1, Y_1, Z_1] = cylinder([0.5-0.02*sin(j*2*pi/12) 0.5-0.02*sin(j*2*pi/12)], 50);
Y = [Y; Y_1(1,: )];
X = [X; X_1(1,: )];
end
y1(1, : ) = Y(1, : );
for i = 1 : 22
x1 = X(1,: );
y1(i+1, : ) = y1(i, : );
n = 0.99451+i/2000;
if i <= 10
m = 0.5 - 4*((1/n-1)^0.4);
else
m = 0.5 + 4*((2-1/n-1)^0.4);
m1 = 1-m-0.5;
end
m = m-0.5;
a = (x1<m);
b = (x1>m);

if i>10
a1=(X(1,: ) < m1);
b1=(X(1,: ) > m1);
y1(i+1,: ) = y1(1,: ).*b + y1(i,: ).*a1;
aa = find(b1-b==1);
y1(i+1,aa(1:round(length(aa)/2))) = y1(i+1,aa(1)-1)*ones(1,round(length(aa)/2));
y1(i+1,aa(1+round(length(aa)/2):length(aa))) = -y1(i+1,aa(1)-1)*ones(1,length(aa(1+round(length(aa)/2):length(aa))));
end

x = x1.*b + m*ones(1,length(X)).*a;

z = ((90+i*3)*ones(1,length(X))+954.47)/1000;
z = z*1000-954.47;

X = [X; x];
Y = [Y; y1(i+1, : )];
Z = [Z; z];
end
mymap = [0,0,1; 1,0,0; 0,0,1];
mesh(X,Y,Z,'EdgeColor','blue')

% hidden off
X1 = -flipud(X);
Y1 = flipud(Y);
% Z1 = 310*ones(size(Z))-flipud(Z);
Z1 = 225*ones(size(Z))-flipud(Z);
hold on
mesh(X1,Y1,Z1,'EdgeColor','blue')
colormap(mymap)
axis([-2.2 2.2 -2.2 2.2 -30 270])