matlab中曲面图上的连接点

matlab中曲面图上的连接点,matlab,plot,polar-coordinates,cartesian-coordinates,Matlab,Plot,Polar Coordinates,Cartesian Coordinates,我正在从事一个项目,我们以线性方式进行测量,并旋转样本以生成3D曲面图 数据来自极坐标格式,我们有4个数据集: theta = 0 , r = -20 -- 20 theta = 45 , r = -20 -- 20 theta = 90 , r = -20 -- 20 theta = 135, r = -20 -- 20 我可以将其转换为笛卡尔点,方法是用正弦和余弦生成x和y向量,并根据该矩阵绘制结果 因此,“准备绘图”矩阵集的示例如下所示: x [4x21 double] -20

我正在从事一个项目,我们以线性方式进行测量,并旋转样本以生成3D曲面图

数据来自极坐标格式,我们有4个数据集:

theta = 0  , r = -20 -- 20
theta = 45 , r = -20 -- 20
theta = 90 , r = -20 -- 20
theta = 135, r = -20 -- 20
我可以将其转换为笛卡尔点,方法是用正弦和余弦生成x和y向量,并根据该矩阵绘制结果

因此,“准备绘图”矩阵集的示例如下所示:

x [4x21 double]
-20    -18    -16 ..
-14.14 -12.73 -11.31 ..
0      0      0 ..
..

y [4x21 double]
0      0      0 ..
-14.14 -12.73 -11.31 ..
-20    -18    -16 ..
..

z [4x21 double]
.224 .281 .320 ..
.228 .280 .312 ..
.282 .349 .377 ..
..
具有一些基本格式的输出曲面图如下所示:

Matlab正在连接我想要的向量。但是,它没有将90度旋转连接到135度旋转。我怎样才能做到这一点

生成类似于上述示例的图形的基本代码如下:

theta = [ 0 , -45 , -90 , -135];
r = -20 : 2 : 20;
for i = 1 : 4
    xc(i,:) = r .* cosd(theta(i));
    yc(i,:) = r .* sind(theta(i));
    zc(i,:) = [[0 : 0.1 : 0.9] , [1 : -0.1 : 0]];
end
figure
surf(xc,yc,zc);

您只需显式地执行
theta=-180
。就像
plot
不会环绕并连接第一个点和最后一个点一样,
surf
也不会将第一个“边”连接到最后一个“边”。做
theta=[0-45-90-135-180]
并做
为i=1:5
应该是好的

您会发现颜色看起来有点奇怪,这可能会更好,具体取决于应用程序:
surf(xc、yc、zc、'FaceColor'、'interp')

创建数据的更好方法是

[R,TH]=meshgrid(r,theta);
[xc,yc]=pol2cart(TH*pi/180,R);
zc = repmat([[0 : 0.1 : 0.9] , [1 : -0.1 : 0]],length(theta),1);

您还可以使用
pol2cart
将极坐标转换为笛卡尔坐标。是否使用
surf
?@David手动绘制极坐标到笛卡尔坐标更可取,因为我每21个r值只使用一个rho值。我确实在策划冲浪。对于x和y向量的第四行,x的值从正到负。好的,我想我帮不了你,除非你做一个标记,这样人们就可以玩代码了。@David我添加了示例代码。在这种情况下,z的值没有意义。