我有这个等式r=z*cos(theta)
,我需要在Matlab中用笛卡尔坐标绘制它。我怎么能这样做?
答案 0 :(得分:2)
首先,圆柱坐标的定义是错误的。给定z
轴theta
周围的方位角扫描以及圆柱r
的半径,圆柱内的笛卡尔坐标定义为:
x = r*cos(theta)
y = r*sin(theta)
z = z
因此,您需要为r
,theta
和z
定义一个坐标网格,使用这些坐标并将它们插入上面的代码中,然后绘制他们。我建议您使用plot3
,因为您想在笛卡尔空间中绘制3D点。另外,使用meshgrid
来定义点网格。
因此,当您进行绘制时,圆柱的半径(通常)是恒定的,而theta
和z
是您变化的数量。我们假设-2 <= z <= 2
和r = 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
这就是我得到的:
你当然可以使用更有效的技术,比如Kamtal在pol2cart
中提出的建议,但你说你想要实际的笛卡尔坐标,所以x
,y
和{ {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
如果您将其更改为r = 1 .* cos(theta);
,那么您将获得一个圆柱,