最优搜索职位一个矩形多边形内,更快的方法比使用shapeID联盟吗?

5视图(30天)
你好,
我想检查是否蓝色矩形内完全是红色的形状。为此,目前我做这些事情的时候,我定义一个网格中心点的蓝色矩形(黑色x),然后对所有这些职位我检查使用欧盟shapeID函数(见下文)矩形是否在红色的多边形。来加快我使用一个粗糙的网格远离边缘和更细网格接近边缘。但是,如果我想确定这个精度高(因此一个非常细网格),这将花很长时间来确定。有一个有效的/快速的方法?或者你有想法如何加速这吗?Inpolygon更慢,因为需要把矩形的边也在较小的部分做了检查准确。
[shapeID, ~ ~] =联盟(poly_range poly_rect);
所有(shapeID = = 1);
亲切的问候,
Bas
1评论
马特·J
马特·J 2021年6月6日
编辑:马特·J 2021年6月6日
你为什么删除你的地区图说明?它使你的问题更难理解,追溯。这是原始版本,恢复从谷歌缓存:
我想检查是否蓝色矩形内完全是红色的形状。为此,目前我做这些事情的时候,我定义一个网格中心点的蓝色矩形(黑色x),然后对所有这些职位我检查使用欧盟shapeID函数(见下文)矩形是否在红色的多边形。来加快我使用一个粗糙的网格远离边缘和更细网格接近边缘。但是,如果我想确定这个精度高(因此一个非常细网格),这将花很长时间来确定。有一个有效的/快速的方法?或者你有想法如何加速这吗?Inpolygon更慢,因为需要把矩形的边也在较小的部分做了检查准确。
[shapeID, ~ ~] =联盟(poly_range poly_rect);
所有(shapeID = = 1);

登录置评。

接受的答案

马特·J
马特·J 2021年5月17日
编辑:马特·J 2021年5月17日
如果红色的形状是固定的,你想做这个测试对一群蓝色的矩形,一个好的策略可以将红色区域分解成一小部分凸形状的结合。你所示的红色形状,可以通过分解成2半圆圈和3红色矩形。然后您可以使用 inpolygon 测试是否蓝色矩形的顶点都位于相同的凸次区域。
这只是一个充分条件控制并不是一个决定性的测试,但是如果你有一群整个红色蓝色矩形形状,它可以消除大量的矩形,需要与你当前的测试,较慢的方法。
同时,仍然假设红色形状是固定的,更快的测试比inpolygon容器的方法 pre-convert凸红条件不等式形式* x < = b 就测试点是否满足不等式。

答案(1)

Aditya帕蒂尔
Aditya帕蒂尔 2021年5月17日
编辑:Aditya帕蒂尔 2021年5月17日
outershape不是凸,没有快速的方法肯定说多边形内部的矩形。
另一个选择是随机样本边缘的矩形或均匀,然后使用inpolygon。请注意,inpolygon GPU和并行计算支持,所以你可能会获得一些性能。万博1manbetx
同样的,如果你 项目的多边形 一个轴平行于坐标轴的矩形,然后抽样边缘会简单。如果你检查多个矩形同样的多边形,然后这可能是最好的方法,如投影将平摊成本inpolygon多个调用。

类别

找到更多的在直接搜索帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!