微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅针对满足MATLAB

如何解决仅针对满足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))然后从aXY中手动删除元素之外,是否有一种简单的方法可以做到这一点? ,使用嵌套的for循环?我还没有找到通过更改Vx来限制我感兴趣的绘图区域的任何方法

解决方法

使用逻辑索引

以防万一您仍在寻找任何实现细节。引用 @Ander Biguri 的评论。我必须补充一点,直接在逻辑索引中使用网格参数XY可能会更容易。这是一个小的游乐场脚本,可能会帮助将来的读者。 Region_Array下面是一个逻辑数组,用于指定在这种情况下sqrt(X.^2 + (Y-c).^2) < b为真的条件。为真时,Region_Array的索引值为“ 1”,而其他地方的索引值为“ 0”。为了迅速找到互补区域,我将其分为两个步骤。下面的图像/图显示了生成的surf()和蒙版/区域。 MATLAB有一些详尽的文档和示例,概述了逻辑索引编制:Find Array Elements That Meet a Condition

相对表面图:

Eliminating Surf Portions

不需要绘制的掩码/区域:

Corresponding Regions

游乐场脚本:

%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 举报,一经查实,本站将立刻删除。