MATLAB中的分段常曲面

MATLAB中的分段常曲面,matlab,Matlab,我想生成一个分段常数曲面,它在某个矩形外为零。更具体地说,对于R^2中的t=(x,y),我想要 f(t) = 1 when 5<y<10 and 0<x<1; -1 when 0<y<5 and 0<x<1; 1 when -5<y<0 and 0<x<1; 0 elsewhere f(t)=1当5时,您可以只使用逻辑索引: x = -2:.01:2; y = -15:15; [X,Y] = meshgri

我想生成一个分段常数曲面,它在某个矩形外为零。更具体地说,对于R^2中的t=(x,y),我想要

f(t) = 1 when 5<y<10 and 0<x<1;
  -1 when 0<y<5 and 0<x<1;
   1 when -5<y<0 and 0<x<1;
   0 elsewhere

f(t)=1当5时,您可以只使用逻辑索引:

x = -2:.01:2; y = -15:15;
[X,Y] = meshgrid(x,y); %// Make domain

h2=zeros(size(X));
h2(5<Y & Y<10 & 0<X & X<1)=1;
h2(0<Y & Y<5 & 0<X & X<1)=-1;
h2(-5<Y & Y<0 & 0<X & X<1)=1;
x=-2:.01:2;y=-15:15;
[X,Y]=网格网格(X,Y);%//制造领域
h2=零(尺寸(X));

氢(5使用逻辑运算符组合,您可以非常轻松地实现您想要的矢量化。避免使用
for
循环来实现类似的操作。像以前一样定义
网格网格
,但分配一个零矩阵,然后只在
网格
中设置满足您想要的要求的值是
f(t)
的输出值。换句话说,执行以下操作:

%// Your code
x = -2:0.1:2; y = -15:15;
[X,Y] = meshgrid(x,y); %Make domain

%// New code
Z = zeros(size(X));
Z(Y > 5 & Y < 10 & X > 0 & X < 1) = 1;
Z(Y > 0 & Y < 5 & X > 0 & X < 1) = -1;
Z(Y > -5 & Y < 0 & X > 0 & X < 1) = 1;
mesh(X,Y,Z);
view(-60,20); %// Adjust for better angle
%//您的代码
x=-2:0.1:2;y=-15:15;
[X,Y]=网格网格(X,Y);%Make域
%//新代码
Z=零(尺寸(X));
Z(Y>5&Y<10&X>0&X<1)=1;
Z(Y>0&Y<5&X>0&X<1)=-1;
Z(Y>-5&Y<0&X>0&X<1)=1;
网格(X,Y,Z);
视图(-60,20);%//调整以获得更好的角度
上面的代码分配一个零矩阵,然后开始遍历分段定义的每个部分,并搜索满足特定兴趣范围的
x
y
值。然后将
Z
的输出设置为
f(t)的任何输出
给出了这些约束条件。请注意,通过先将整个矩阵设置为零,已经处理了否则的情况。然后,我使用将曲面可视化,然后调整绘图的方位角和仰角,以获得更好的视图。具体来说,我将其分别设置为-60度和20度。还要注意我降低了
x
值的分辨率,使步长为0.1,而不是0.01,以获得较小的粒度。这只是为了更好地查看
网格

这是我得到的图表:


你有什么想要实现的图像例子吗?我很难想象你想要什么。顺便说一句,如果你想标准化面积,你可以通过对曲面求和来近似这个。无需使用
trapz
%// Your code
x = -2:0.1:2; y = -15:15;
[X,Y] = meshgrid(x,y); %Make domain

%// New code
Z = zeros(size(X));
Z(Y > 5 & Y < 10 & X > 0 & X < 1) = 1;
Z(Y > 0 & Y < 5 & X > 0 & X < 1) = -1;
Z(Y > -5 & Y < 0 & X > 0 & X < 1) = 1;
mesh(X,Y,Z);
view(-60,20); %// Adjust for better angle