是否存在一种算法来确定二维空间中的一组点是否形成一个封闭区域
Is there an algorithm for determining if a set of points in 2D space forms a closed region?
我有一组点(x, y),我想知道它是否形成一个封闭区域(在矩形二维光栅内)。这似乎是一个简单的问题,但在谷歌上搜索了半个小时后,我找不到解决这个问题的算法。有已知的算法来解决这个问题吗?
用c++或c#(甚至伪代码)编写的例程将是理想的。
编辑:我在这里处理的具体问题是一个绘图程序,其中应用程序用户应该在感兴趣的区域周围绘制边界。我想警告用户,如果他们绘制的边界没有形成一个封闭区域
似乎你想知道一个给定的点集合是否包含一个封闭区域。幸运的是,有一个简单而灵活的答案:)
假设给定的点集是在白色背景上绘制的黑色像素集。简单地从已知的外部点(例如(0,0))开始执行黑色洪水填充。现在看看图像中是否还有白色像素。如果是,则原始绘制的像素包含至少1个封闭区域。
如果你曾经在一个粗糙的位图绘画程序中用鼠标画过任何东西,你就会知道小缺陷很容易形成——例如,如果你画一条自由形状的线,急剧转弯,并在不同的方向上继续这条线,可能是你不小心创造了一个1或2个白色像素的小气泡。幸运的是,这个算法可以很容易地考虑到这些:只计算洪水填充后剩余的白色像素的数量,只有当这个计数超过大于1的某个选择的阈值时才返回"YES"。(您可能希望使阈值与集合中的点数量成比例,以允许每个像素绘制给定数量的缺陷。)为了更好的控制,在洪水填充之后,您可以识别并删除所有低于某个固定"缺陷阈值"大小的白色像素岛。检测可以通过试探性地对图像中的每个像素进行洪水填充来完成,一旦超过阈值大小就停止(并取消)。
所有这些操作,包括检测和去除小缺陷,在图像中像素的数量上只需要线性的时间。洪水填充是一种简单而快速的算法,但如果你想要更快一点的速度,你可以只对给定像素集的边界框进行洪水填充,每边向外扩展1个像素。
- 如何更好地检查两个 char 变量是否在一组值中?
- 如何检查cin是否与数组中的一组数字匹配
- 是否有一种工具可以识别一组C++源文件所指的外部标识符
- 检查一组类型是否是具有组合的子集
- 继承是否是将一组模型参数传递给不同类的可行解决方案
- 使用 C++ GMock 匹配器测试unordered_map的密钥是否来自一组密钥
- 有没有办法在编译时检测是否可以使用一组给定的参数类型成功调用通用 lambda?
- 我想返回 True/False 关于值是否在一组值中
- 如何查找一组类型对是否包含一个元素作为第二个成员
- 是否可以为CPP中的对象创建一组指针
- C++是否有任何方法可以将一组派生类存储在基类的一个向量中,并仍然访问它们的成员
- 是否有一组标准编译器选项
- 每次需要其中一个类的实例时,是否具有一组类的额外副本或从文件中读取更多内存
- 如何检查一组字符是否包含在C++的字符数组中
- 如何查找点是否在一组区间内
- 如何在gcc的特定部分中放置一组变量,arm是否有类似#pragma default_variable_attribut
- c++11 regex:检查字符串中是否存在一组字符
- 存储一组不重叠的范围,并严格查找一个值是否存在于任何一个范围中
- 如何确定一组矩形是否包含两个重叠区域
- 我正在尝试比较来自两个输入文件的数据,以查看一组是否比另一组少