将平面弯曲成闭合的表面/圆柱体

时间:2014-10-16 15:58:23

标签: matlab plot

我在Matlab进行数学实验,结果应该是x,y平面上的圆。但有时,圆圈开始螺旋式上升。我现在正试图将x,y平面弯曲成圆柱体(如下图所示)。目前我只有点的x和y坐标。

我已经尝试将它们转换为极坐标,然后使用一些'冲浪'突击队,但现在没有任何作用

cylinder http://www.wtcoeselgem.be/andere/plot_cylinder.png

编辑我按照Ander Biguri的建议使用了plot3命令,结果如下图所示。

cylinder2 http://www.wtcoeselgem.be/andere/plot_cylinder3.png

2 个答案:

答案 0 :(得分:4)

我会认为您有一条由xy坐标定义的曲线,您希望折叠在圆柱体周围。

%% // Generate sample data
x = linspace(0,10*pi) ;
y2 = cos(x) ;
y1 = 10*cos(x/10) ;
y = y1+y2 ; y = y-min(y) ;
figure, plot(x,y,'-o') ;

这产生:
plot flat

接下来我定义一个基本的圆柱体,没有原始的:

%% // Basic cylinder (just for background)
[Xc,Yc,Zc] = cylinder(1,100);
Zc = Zc * max(y) ;
hs = surf(Xc,Yc,Zc) ;
set(hs,'FaceColor',[.8 .8 .8],'FaceAlpha',0.5,'EdgeColor','none') ;
hold on

有趣的是:

%% // Fold the points around the cylinder
Number_of_turn = 2 ;
xrange = [min(x),max(x)] ;
xspan = xrange(2)-xrange(1) ;
xc = x / xspan * 2*pi * Number_of_turn ;

Xp = cos(xc) ;
Zp = y ;
Yp = sin(xc) ;

hp = plot3(Xp,Yp,Zp,'-ok') ;

渲染:
plot folded

对于这个例子,我假设你想把你的曲线包裹起来" 2转"气缸。使用Number_of_turn变量可以轻松更改此内容。

请注意,您还可以通过将XpYp坐标乘以半径来更改圆柱的半径。

答案 1 :(得分:3)

以下似乎或多或少地做了你想要的事情

%// Data
xmin = -3;
xmax = 3; %// this piece will get folded into a cylinder
Rc = 5; %// cylinder radius
zmaxc = 5; %// cylinder max z
zminc = -5; %// cylinder min z

%// Spiral
t = linspace(0,1,1000);
r = 1+2*t;
theta = 2*pi*3*t;
x1 = r.*cos(theta);
y1 = r.*sin(theta); %// example spiral. Defined by x1, y1

%// Do the bending
z2 = y1;
phi = (x1-xmin)/(xmax-xmin)*2*pi;
x2 = Rc*cos(phi);
y2 = Rc*sin(phi);

%// Plot cylinder
[xc yc zc] = cylinder(Rc*ones(1,100),100);
zc = zminc + (zmaxc-zminc)*zc;
surf(xc,yc,zc)
shading flat
hold on

%// Plot bent spiral
plot3(x2,y2,z2, 'k.-');

原始螺旋:

enter image description here

结果的两个视图:

enter image description here

enter image description here