我在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出现在外部:
答案 0 :(得分:4)
我将定义一个网格并评估对应于四个功能中每个功能的逻辑表达式。 然后我将计算它们的交集。
我认为它不适用于不同的x1
和x2
网格,因为您需要在相同的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);