MATLAB将xy图转换为xyz数组

时间:2019-06-23 17:32:25

标签: arrays matlab matrix geometry

我在MATLAB中以x与y格式绘制了一系列曲线。我想以xyz格式(2D数组)描述他们在交点处创建的形状。

MATLAB中没有简单的函数可以进行转换,所以我想知道是否有人可以快速解决此问题。

这是一个简单的例子。我创建了默认网格:

nx = 100;   % Number of grid points
X = 1;      % Default total grid size (cm)
dx = X/nx;  % Default grid step size (cm)

我使用网格和缩放后的网格创建一组抛物线和直线:

x1 = (-nx/2:1:nx/2-1)*dx;   % grid 1 (cm)
x2 = (-nx/2:1:nx/2-1)*dx*2; % grid 2 (cm)
y1 = x1.^2;                 % parabola 1 
y2 = -x2.^2 + 2;            % parabola 2 
y3 = -1.5*x2-.5;            % line 1
y4 = 1.5*x2-.5;             % line 2

最后,我可以绘制要描述的形状:

figure(1)
plot(x1,y1)
hold on;
plot(x2,y2)
hold on;
plot(x2,y3)
hold on
plot(x2,y4)
xlabel('x coordinate (cm)')
ylabel('y coordinate (cm)')

请注意,我的x和y坐标均以cm为单位。我希望创建一个2D矩阵,其中1出现在“眼睛”区域内,而0出现在外部:

https://imgur.com/Zhysy1p

Figure 1

1 个答案:

答案 0 :(得分:4)

我将定义一个网格并评估对应于四个功能中每个功能的逻辑表达式。 然后我将计算它们的交集。

我认为它不适用于不同的x1x2网格,因为您需要在相同的x值上评估函数。

类似这样的东西:

nx = 100;   % Number of grid points
X = 1;      % Default total grid size (cm)
dx = X/nx;  % Default grid step size (cm)

xq = (-nx/2:1:nx/2-1)*dx*2;   % grid x (cm)
yq = (-nx/2:1:nx/2-1)*dx*4;   % grid y (cm)


[XX, YY] = meshgrid(xq, yq);

ZZ_1 = (YY > XX.^2); % upper range of function 1
ZZ_2 = (YY < -XX.^2 + 2); % bottom range of function 2
ZZ_3 = (YY > -1.5*XX - 0.5); % upper range of function 3
ZZ_4 = (YY > 1.5*XX - 0.5); % upper range of function 4

ZZ = int8(ZZ_1 & ZZ_2 & ZZ_3 & ZZ_4); % the intersection of all functions

figure;
surf(XX, YY, ZZ);

Intersection of the four logical arrays