在 matlab 中连接曲面图上的点
Connecting points on a surface plot in matlab
我正在进行一个项目,我们以线性方式进行测量并旋转样本以生成 3D 表面图。
数据来自极坐标格式,我们有 4 个数据集:
theta = 0 , r = -20 -- 20
theta = 45 , r = -20 -- 20
theta = 90 , r = -20 -- 20
theta = 135, r = -20 -- 20
我可以通过使用 sin 和 cos 生成 x 和 y 向量并将结果根据该矩阵绘制出来,将其转换为笛卡尔点。
所以一个示例 "ready to plot" 矩阵集看起来像这样:
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
不会将第一个 "edge" 连接到最后一个 "edge"。制作 theta=[0 -45 -90 -135 -180]
并制作 for 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);
我正在进行一个项目,我们以线性方式进行测量并旋转样本以生成 3D 表面图。
数据来自极坐标格式,我们有 4 个数据集:
theta = 0 , r = -20 -- 20
theta = 45 , r = -20 -- 20
theta = 90 , r = -20 -- 20
theta = 135, r = -20 -- 20
我可以通过使用 sin 和 cos 生成 x 和 y 向量并将结果根据该矩阵绘制出来,将其转换为笛卡尔点。
所以一个示例 "ready to plot" 矩阵集看起来像这样:
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
不会将第一个 "edge" 连接到最后一个 "edge"。制作 theta=[0 -45 -90 -135 -180]
并制作 for 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);