如何解决仅针对满足MATLAB
我有两个通过调用X
创建的网格坐标矩阵Y
和[X,Y] = meshgrid(x,y)
,因此它们的元素表示坐标。仅对于满足特定方程式的坐标,如何使用矩阵V
的高度在xy平面上绘制表面?例如,我的绘图一直延伸到半径a
,但是我不想将任何数据绘图到满足方程sqrt(x ^ 2 +(yc)^ 2)b(c
)被赋予常数和a>b
。除了创建两个网格坐标矩阵(最大半径为x=X(i,j),y=Y(i,j)
)然后从a
,X
,Y
中手动删除元素之外,是否有一种简单的方法可以做到这一点? ,使用嵌套的for循环?我还没有找到通过更改V
,x
来限制我感兴趣的绘图区域的任何方法。
解决方法
使用逻辑索引
以防万一您仍在寻找任何实现细节。引用 @Ander Biguri 的评论。我必须补充一点,直接在逻辑索引中使用网格参数X
和Y
可能会更容易。这是一个小的游乐场脚本,可能会帮助将来的读者。 Region_Array
下面是一个逻辑数组,用于指定在这种情况下sqrt(X.^2 + (Y-c).^2) < b
为真的条件。为真时,Region_Array
的索引值为“ 1”,而其他地方的索引值为“ 0”。为了迅速找到互补区域,我将其分为两个步骤。下面的图像/图显示了生成的surf()
和蒙版/区域。 MATLAB有一些详尽的文档和示例,概述了逻辑索引编制:Find Array Elements That Meet a Condition
相对表面图:
不需要绘制的掩码/区域:
游乐场脚本:
%Random test axes%
x = linspace(0,100,50);
y = linspace(0,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); surf(X,V);
axis([0 100 0 100]);
title("Eliminating Outside the Curved Region");
figure(2)
subplot(1,1); imshow(~Region_Array,'InitialMagnification',200);
title("Region Array Mask/Map (Inside)")
subplot(1,2); imshow(Region_Array,200);
title("Region Array Mask/Map (Outside)")
使用MATLAB R2019b运行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。