仅为满足 MATLAB 中特定方程的坐标绘制曲面
Plot a surface only for coordinates that satisfy a specific equation in MATLAB
我有两个网格坐标矩阵,X
和 Y
,它们是通过调用 [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
)然后手动从 X
、Y
、V
中删除元素之外,有没有一种简单的方法可以做到这一点, 使用嵌套 for 循环?我还没有找到任何方法来通过更改 x
、y
.
来限制我感兴趣的绘图区域
使用逻辑索引
以防万一您仍在寻找任何实施细节。参考 @Ander Biguri 的评论。我必须补充一点,直接在逻辑索引中使用网格参数 X
和 Y
可能更容易。这是一个小的游乐场脚本,可能会对未来的读者有所帮助。 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
我有两个网格坐标矩阵,X
和 Y
,它们是通过调用 [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
)然后手动从 X
、Y
、V
中删除元素之外,有没有一种简单的方法可以做到这一点, 使用嵌套 for 循环?我还没有找到任何方法来通过更改 x
、y
.
使用逻辑索引
以防万一您仍在寻找任何实施细节。参考 @Ander Biguri 的评论。我必须补充一点,直接在逻辑索引中使用网格参数 X
和 Y
可能更容易。这是一个小的游乐场脚本,可能会对未来的读者有所帮助。 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