【问题标题】:Plot a surface only for coordinates that satisfy a specific equation in MATLAB仅针对满足 MATLAB 中特定方程的坐标绘制曲面
【发布时间】:2021-02-20 18:51:28
【问题描述】:

我有两个网格坐标矩阵XY,通过调用[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)然后使用嵌套的for循环从XYV 中手动删除元素之外,是否有一种简单的方法可以做到这一点?我还没有找到任何方法来通过更改xy 来限制我感兴趣的绘图区域。

【问题讨论】:

  • 制作vNaN。说你可以制作v(x>5 && mod(y/3)==0)=NaN,然后只需surf。所有的 NaN 都不会被绘制
  • @AnderBiguri 您如何在 MATLAB 中编写此代码?我认为如果没有 for 循环,这条线是行不通的。
  • 不正确,该行是完全有效的matlab。阅读“逻辑索引”,或者只是尝试一下

标签: matlab matrix plot surface


【解决方案1】:

使用逻辑索引

以防万一您仍在寻找任何实施细节。引用 @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

平凡曲面图:

不绘制的掩码/区域:

游乐场脚本:

%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 运行

【讨论】:

  • 非常详细的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多