Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中,仅为满足特定方程式的坐标绘制曲面_Matlab_Matrix_Plot_Surface - Fatal编程技术网

在MATLAB中,仅为满足特定方程式的坐标绘制曲面

在MATLAB中,仅为满足特定方程式的坐标绘制曲面,matlab,matrix,plot,surface,Matlab,Matrix,Plot,Surface,我有两个网格坐标矩阵,X和Y,通过调用[X,Y]=meshgrid(X,Y)创建,因此它们的元素表示坐标。如何在xy平面上绘制曲面,仅针对满足特定方程式的坐标,使用矩阵的高度V?例如,我的绘图延伸到半径a,但我不想将任何数据绘图到满足方程式sqrt(x^2+(y-c)^2)b)是给定的常数,x=x(I,j),y=y(I,j)。除了创建两个栅格坐标矩阵(最大半径为a),然后使用嵌套for循环手动删除X、Y、V中的元素外,还有其他简单的方法吗?我没有找到任何方法通过使用逻辑索引更改x,y来限制我感兴

我有两个网格坐标矩阵,
X
Y
,通过调用
[X,Y]=meshgrid(X,Y)
创建,因此它们的元素表示坐标。如何在xy平面上绘制曲面,仅针对满足特定方程式的坐标,使用矩阵的高度
V
?例如,我的绘图延伸到半径
a
,但我不想将任何数据绘图到满足方程式sqrt(x^2+(y-c)^2)b
c
a>b
)是给定的常数,
x=x(I,j),y=y(I,j)
。除了创建两个栅格坐标矩阵(最大半径为
a
),然后使用嵌套for循环手动删除
X
Y
V
中的元素外,还有其他简单的方法吗?我没有找到任何方法通过使用逻辑索引更改
x
y

来限制我感兴趣的绘图区域 以防您仍在寻找任何实现细节。引用Ander Biguri的评论。我必须补充一点,在逻辑索引中直接使用网格参数
X
Y
可能更容易。下面是一个可能对未来读者有所帮助的小游戏脚本。下面的
Region\u Array
是一个逻辑数组,它指定了本例中
sqrt(X.^2+(Y-c)。^2)
的条件为真的位置。为true时,区域数组的索引值为“1”,其他地方的索引值为“0”。我把它分为两个步骤,以防很快需要互补区域。下面的图像/绘图显示了生成的
surf()
和遮罩/区域。MATLAB提供了一些全面的文档和示例,概述了逻辑索引:

普通曲面图:

不绘制的遮罩/区域:

操场剧本:
%随机测试轴%
x=linspace(0100,50);
y=linspace(0100,50);
[X,Y]=网格网格(X,Y);
%1%的琐碎情节
V=一(长度(x),长度(y));
%常数参数%
b=20;
c=10;
%在弯曲区域内消除%
图(1)
区域数组=sqrt(X.^2+(Y-c)。^2)

使用MATLAB R2019b运行

make
v
NaN
。假设您可以使
v(x>5&&mod(y/3)==0)=NaN
,然后只需
surf
。所有的南都不会是plotted@AnderBiguri如何在MATLAB中编写?我认为如果没有for循环,这条线就不能工作。不正确,这条线是完全有效的。阅读有关“逻辑索引”的内容,或者只是尝试给出一个非常详细的答案:)
%Random test axes%
x = linspace(0,100,50);
y = linspace(0,100,50);
[X,Y] = meshgrid(x,y);

%Trivial plot of ones%
V = ones(length(x),length(y));

%Constant parameters%
b = 20;
c = 10;

%Eliminating within the curved region%
figure(1)
Region_Array = sqrt(X.^2 + (Y-c).^2) < b;
V(Region_Array) = NaN;
subplot(1,2,1); surf(X,Y,V);
axis([0 100 0 100]);
title("Eliminating Within the Curved Region");

%Eliminating outside the curved region%
V = ones(length(x),length(y));
V(~Region_Array) = NaN;
subplot(1,2,2); surf(X,Y,V);
axis([0 100 0 100]);
title("Eliminating Outside the Curved Region");

figure(2)
subplot(1,2,1); imshow(~Region_Array,'InitialMagnification',200);
title("Region Array Mask/Map (Inside)")
subplot(1,2,2); imshow(Region_Array,'InitialMagnification',200);
title("Region Array Mask/Map (Outside)")