【发布时间】:2021-03-15 18:14:39
【问题描述】:
我正在尝试在 Matlab 中的 3D cylindrical coorindates 中定义一个函数,然后将其转换为 3D 笛卡尔以进行绘图。
例如,如果我的函数仅依赖于径向坐标 r(为简单起见,假设为线性),我可以在 f = 70 处绘制一个 3D 等值面,如下所示:
x = linspace(-10,10,100);
y = linspace(-10,10,100);
z = linspace(-2,2,100);
[X,Y,Z] = meshgrid(x,y,z);
R = sqrt( X.^2 + Y.^2 ); % Calculate the radius for each [x,y] coordinate pair
f = 100*R; % Calculate the function f, dependent only on the radius
isosurface(X,Y,Z,f,70);
但是,由于该函数仅依赖于 r,因此我应该能够只为 r 坐标定义一个向量,并据此计算 f:
r = 0:0.1:1 ; % define radial coordinate
f = 100*r ; % make the function linearly dependent on radial coorindate for simplicity
我现在的目标是仅基于知道 r 和 f 来绘制等值面。我想指定一个 z 和 theta 坐标的向量,可能是这样的
z = linspace(-2,2,100);
theta = linspace(0,2*pi,50);
并将它们与 r 一起使用来生成 [x,y,z] 坐标。另外,f 现在是一维数组,而不是像第一个示例那样是 3D 数组,所以 f 需要以某种方式重新整形?
这是因为我试图在循环内多次对 f 进行操作,而在第一种情况下,这会导致对 3D 矩阵进行许多操作,这太慢了。我想改为对 1D 矢量执行操作,并生成仅用于绘图的 3D 版本。
我希望我的问题很清楚。我不认为 pol2cart 函数可以满足我的要求,但我可能是错的。
【问题讨论】:
标签: arrays matlab plot coordinates reshape