matlab 怎么画圆柱投影,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

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])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值