如何在笛卡尔坐标系中绘制圆柱坐标方程

时间:2014-11-21 15:38:52

标签: matlab

我有这个等式r=z*cos(theta),我需要在Matlab中用笛卡尔坐标绘制它。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

首先,圆柱坐标的定义是错误的。给定ztheta周围的方位角扫描以及圆柱r的半径,圆柱内的笛卡尔坐标定义为:

x = r*cos(theta)
y = r*sin(theta)
z = z

因此,您需要为rthetaz定义一个坐标网格,使用这些坐标并将它们插入上面的代码中,然后绘制他们。我建议您使用plot3,因为您想在笛卡尔空间中绘制3D点。另外,使用meshgrid来定义点网格。

因此,当您进行绘制时,圆柱的半径(通常)是恒定的,而thetaz是您变化的数量。我们假设-2 <= z <= 2r = 2。我们知道要创建圆柱体,我们必须绕过0 <= theta <= 2*pi的圆圈。因此,做这样的事情:

%// Define (r,theta,z)
[theta, z] = meshgrid(0:0.001:2*pi, -2:0.001:2);
r = 2*ones(size(theta));

%// Calculate x and y.  z was calculated earlier
x = r.*cos(theta);
y = r.*sin(theta);

%// Plot the points
plot3(x(:), y(:), z(:), 'b.');
grid;
view(-48,60); %// Adjust viewing angle

这就是我得到的:

enter image description here


你当然可以使用更有效的技术,比如Kamtal在pol2cart中提出的建议,但你说你想要实际的笛卡尔坐标,所以xy和{ {1}}包含3D空间中的坐标。我假设您希望这些用于进一步处理。

祝你好运!

答案 1 :(得分:1)

n = linspace(-pi,pi,20);
m = linspace(0,1,20);
[theta,z] = meshgrid(n,m);
r = z .* cos(theta);
[X,Y,Z] = pol2cart(theta,r,z); 
surf(X,Y,Z)
axis equal

enter image description here

如果您将其更改为r = 1 .* cos(theta);,那么您将获得一个圆柱,

enter image description here