Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2009-06-25, 09:58   #1
Thinklad
初级会员
 
注册日期: 2009-06-24
帖子: 1
声望力: 0
Thinklad 正向着好的方向发展
默认 求助:我想要圆柱体的二维投影图,这里有我的MATLAB圆柱体程序。

我有一个三维圆柱体图,想要它 的二维投影图,然后通过二维投影图重建出三维图像。希望有人指点迷津。非常感谢。
程序:
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])
Thinklad 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 12:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.