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

Plot a surface only for coordinates that satisfy a specific equation in MATLAB

我有两个网格坐标矩阵,XY,它们是通过调用 [X, Y] = meshgrid(x, y) 创建的,所以它们的元素代表坐标。如何仅针对满足特定方程的坐标使用矩阵 V 的高度在 xy 平面上绘制曲面?例如,我的绘图延伸到半径 a,但我不想将任何数据绘制到满足方程 sqrt(x^2 + (y-c)^2) < b 的点集,其中 b, c (a>b) 被赋予常量和 x=X(i,j), y=Y(i,j)。除了创建两个网格坐标矩阵(最大半径 a)然后手动从 XYV 中删除元素之外,有没有一种简单的方法可以做到这一点, 使用嵌套 for 循环?我还没有找到任何方法来通过更改 xy.

来限制我感兴趣的绘图区域

使用逻辑索引

以防万一您仍在寻找任何实施细节。参考 @Ander Biguri 的评论。我必须补充一点,直接在逻辑索引中使用网格参数 XY 可能更容易。这是一个小的游乐场脚本,可能会对未来的读者有所帮助。 Region_Array 下面是一个逻辑数组,它指定在这种情况下 sqrt(X.^2 + (Y-c).^2) < b 的条件为真。当 true Region_Array 被索引为值“1”而其他地方被索引为“0”。我将其分为两个步骤,以防很快需要互补区域。下面的 images/plots 显示了结果 surf() 和 masks/regions。 MATLAB 有一些详尽的文档和示例概述了逻辑索引:Find Array Elements That Meet a Condition

平凡曲面图:

Masks/Regions 不绘制:

游乐场脚本:

%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)")

运行 使用 MATLAB R2019b