我试图找到一种方法来确定从一组整数关口的rectilinear polygon(由红点在下面的图片所示)。下面的图片是我想达到的目标:正交船体算法
1.
我只需要最少的一组定义直线多边形的边界点。大部分船体的算法,我可以找到不满足这个问题的性质正交,如gift-wrapping algorithm,其产生如下结果(这是不我想要的)......
2.
如何获得定义图像中所示边界的点集1.?
更新时间:
图1.不再吹罚为凸..
我试图找到一种方法来确定从一组整数关口的rectilinear polygon(由红点在下面的图片所示)。下面的图片是我想达到的目标:正交船体算法
1.
我只需要最少的一组定义直线多边形的边界点。大部分船体的算法,我可以找到不满足这个问题的性质正交,如gift-wrapping algorithm,其产生如下结果(这是不我想要的)......
2.
如何获得定义图像中所示边界的点集1.?
更新时间:
图1.不再吹罚为凸..
继definition from wikipedia,这是相当容易地创建一个快速算法。
为了尽快找到下一个点,只是有点贵点。例如,在构建第一个正确链时,按x增加排序。然后遍历所有点。对于每个点,检查其坐标是否大于当前值。如果是,则将该点添加到列表中并使其为最新。
总体复杂性将是O(N日志N)排序。
编辑:上面的描述只显示如何跟踪船体的主要顶点。如果你想要一个完整的直线多边形(连续点之间有线段),那么每次找到下一个点时,你都必须在链上增加一个点。例如,从当前点建设时,右 - 上链,如果你找到一个点(x2,y2)(X1,Y1),你必须添加(X2,Y1)和(X2 ,y2)添加到当前链表(按此顺序)。
我不知道任何标准算法此,但它似乎并没有太复杂的定义:
假设每个点在网格中至少有2个邻居(或者没有解决方案)
虽然p不为空
2a。 Mark p as visited
2b。 next =拥有最少邻居数量的未标记邻居
2c。 next.parent = p
2d。 P =未来
做
我认为,要计算什么是点的集合的直线凸包(或正交凸包)。直线凸包是一个正凸形状,也就是说,形状与任何水平线或垂直线的交点会产生空集,点或线段。
直线凸包的顶点是矢量优势下的最大点集合。然后可以在最佳O(n log n)时间内计算直线凸包。在计算几何中的Preparata's book中提供了一个非常简单的算法(请参阅4.1.3节)。
您能否澄清哪些正交多边形被认为是凸的?现在还不完全清楚要搜索什么。 – stgatilov
术语'正字法凸包'标准吗?即使只考虑由正交基定义的方向(即,在格外部有点不在集合中),假设船体不是凸的,您可能只需要找到magic关键字。另外:你总是在2 - d? – Leo
你在fig1上的例子。是不凸的 – mprivat