Matlab在给定坐标下图形对象是否存在于图形上

Matlab在给定坐标下图形对象是否存在于图形上,matlab,Matlab,我需要找到一种方法来检查我创建的面片对象(例如矩形)是否存在于我指定的某些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的点上是否有物体。有办法检查这个吗 我不知道您是否熟悉工具箱,但是(我的大学)的工具箱可能会在这里派上用场 安装后,可以

我需要找到一种方法来检查我创建的面片对象(例如矩形)是否存在于我指定的某些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的点上是否有物体。有办法检查这个吗

我不知道您是否熟悉工具箱,但是(我的大学)的工具箱可能会在这里派上用场

安装后,可以将矩形定义为多面体,只需检查点是否在矩形内。 对于上面的代码示例:

Vertices = [0,0;10,0;10,10;0,10];
Rectangle = Polyhedron(Vertices);
TestPoint = [6;3];
Within = Rectangle.contains(Testpoint);
WARE
中是一个布尔变量(如果点在
矩形中,则为1,否则为0)

编辑


当然,工具箱也适用于原始的
矩形
多边形和另一个多边形
相交

之间的交点。您可以使用findobj查找感兴趣的对象,在本例中是面片对象,并访问其“扩展数据”属性,然后检查它是否在某个范围内。您也可以对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
现在将有一部分,你检查一个对象是否在某个位置,但这很容易实现。希望有帮助

使用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

我不知道任何直接的方法,但你可以尝试:findall(a,'Children'),然后检查单个多边形的位置是否在给定范围内(即,如果你有顶点的y和y坐标),这是一条直线:
inpolygon(6,3,x,y)
返回
true
,而
inpolygon(6,30,x,y)
返回
false
很棒的工具箱,但遗憾的是,我需要用基本工具箱来完成它。。。还是谢谢你!没问题!实际上,工具箱对于线性规划等非常有用:)