我需要找到一种方法来检查我创建的补丁对象(例如矩形)是否存在于我指定的某些X-Y坐标中。例如,我使用以下代码:
a = figure
b = axes('Parent',a,'Xlim',[0 100],'Ylim',[0 100])
x = [0 10 10 0];
y = [0 0 10 10];
patch(x,y,'red')
现在我想知道图中是否有坐标为x = 6和y = 3的点。有没有办法检查这个?
答案 0 :(得分:2)
使用findall()和inpolygon函数。
hPatches = findall(b, 'type', 'patch');
tgtX = 5; tgtY = 7;
inside = zeros (1, numel(hPatches));
for patchCtr = 1:numel(hPatches)
vert = get (hPatches(patchCtr), 'Vertices');
inside(patchCtr) = inpolygon (tgtX, tgtY, vert(:,1), vert(:,2));
end
答案 1 :(得分:1)
我不知道你是否熟悉工具箱,但mpt-toolbox可以派上用场(来自我的Uni)。
安装完成后,可以将矩形定义为多面体,只需检查一个点是否在矩形内。 对于上面的代码示例:
Vertices = [0,0;10,0;10,10;0,10];
Rectangle = Polyhedron(Vertices);
TestPoint = [6;3];
Within = Rectangle.contains(Testpoint);
是Within
是一个布尔变量(如果在Rectangle
内,则为1,否则为0)
修改强>
当然,工具箱也适用于原始Rectangle
多边形与另一个多边形Intersect
之间的交叉点。
答案 2 :(得分:1)
您可以使用findobj查找感兴趣的对象,在这种情况下是修补对象,并访问他们的&#X;'属性,然后检查它是否在某个范围内。您也可以对YData属性执行相同的操作。
以下是一个例子:
clc
clear
close all
a=figure;
b=axes('Parent',a,'Xlim',[0 30],'Ylim',[0 30]);
x1 = [0 10 10 0];
y1 = [0 0 10 10];
x2 = [15 25 25 15];
y2= [10 10 20 20];
patch(x1,y1,'red')
patch(x2,y2,'blue')
hPatches = findall(a,'Type','patch') %// find patch objects
InfoPatches = get(hPatches); %// Get info about the objects. Check for the XData property.
XDataArray = zeros(4,numel(InfoPatches));
for k = 1:numel(InfoPatches)
XDataArray(:,k) = InfoPatches(k).XData; %// Access the XData property, or any you want.
end
XDataArray
图:
XDataArray看起来像这样:
XDataArray =
15 0
25 10
25 10
15 0
现在有一个部分可以检查对象是否在某个位置,但这很容易实现。希望有所帮助!