首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试点是否在矩形内

测试点是否在矩形内
EN

Stack Overflow用户
提问于 2017-05-04 05:14:51
回答 1查看 253关注 0票数 2

我有一些数据点,可以很容易地绘制成一个图形在MATLAB中。

我需要找出哪些数据点位于一些矩形区域内,如所附图片所示。在这张图中,黑点代表我的数据点,红色矩形代表提到的区域。

如何搜索数据点并查看它们是否属于任何矩形?我需要每个矩形的所有成员的列表(数据点)。

示例数据点和矩形:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-04 08:24:26

正如Ozcan在评论中所说的那样,inpolygon是前进的道路。下面是一个快速演示,详细信息请参见评论:

代码语言:javascript
复制
% Create 4 random rectangles, defined by their x and y coords in rectX and rectY.
% Each column defines a different rectangle.
sizes = randi([5,10], 2, 4)./10;
rectX = randi([1,5], 1, 4);   rectX = [rectX; rectX; rectX + sizes(1,:); rectX + sizes(1,:)];
rectY = randi([1,5], 1, 4);   rectY = [rectY; rectY + sizes(2,:); rectY + sizes(2,:); rectY];
% Create a random set of 1000 points for testing
points = [rand(1000, 1)*range(rectX(:))+min(rectX(:)), rand(1000, 1)*range(rectY(:))+min(rectY(:))];
% Set up logical matrix of test results
inrect = logical(zeros(size(points,1), size(rectX,2)));
% Plot the rectangles using patch
    figure;
patch(rectX,rectY,'red')
% Hold on and plot all of the points as black dots
hold on; 
plot(points(:,1),points(:,2),'.k');
% Loop through each rectangle, testing the points
for r = 1:size(rectX, 2)
    % Test points using inpolygon, store results to inrect matrix
    inrect(:,r) = inpolygon(points(:,1), points(:,2), rectX(:,r), rectY(:,r));
end
% Plot all points which are in any rectangle as blue circles
plot(points(any(inrect,2), 1), points(any(inrect,2), 2), 'bo');

结果:

注意,现在您有了逻辑矩阵inrect,当点位于矩形内时,它是真的(每个矩形中有一列,每点有一行)。当点位于任意矩形中时,上面的代码使用any运算符绘制。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43774390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档