如何找到从各种2D矩形的集合中创建的边界长度?

时间:2015-11-22 20:20:27

标签: algorithm geometry computational-geometry

您将获得一组矩形,并要求您确定由重叠矩形的轮廓形成的复杂多边形的周长。

3 个答案:

答案 0 :(得分:2)

在Preparata和Shamos的“计算几何”一书中,第8章专门讨论矩形联合问题。使用扫描线算法(link one link two)和O(NLogN)时间中的分段树来解决联合周长的问题

Addition

答案 1 :(得分:0)

  • 我们从每个较小的重叠矩形的位置(所有4个点)开始。
  • 我们通过遍历各种矩形的角点来构造新的多边形。
  • 我们发现矩阵的任何给定行或列遇到的最外围点(最远的北/南/东/西),将它们存储在一个单独的数组中。
  • 一旦我们收集了新多边形的所有点,我们就会围绕网格中心按顺时针顺序对其点进行排序(如果尚未排序)。
  • 我们通过测量其表面上每条线(在每组连续点之间)的距离并将其加到总数中来测量其周长。
 .  .  .  .  .  .  .  .  .  .  .  .
 .  .  .  .  *  x  x  *  .  .  .  .
 .  .  .  .  x  .  .  x  .  .  .  .
 .  .  .  .  x  .  .  x  .  .  .  .
 .  .  *  z  *  z  .  x  .  .  .  .
 .  .  z  .  x  z  .  x  .  .  .  .
 .  .  z  .  x  z  .  x  .  .  .  .
 .  *  *  y  y  y  y  *  y  y  *  .
 .  y  z  .  x  z  .  x  .  .  y  .
 .  *  *  y  y  y  y  *  y  y  *  .
 .  .  z  .  x  z  .  x  .  .  .  .
 .  .  z  .  x  *  x  *  .  .  .  .
 .  .  z  .  .  z  .  .  .  .  .  .
 .  .  *  z  z  *  .  .  .  .  .  .
 .  .  .  .  .  .  .  .  .  .  .  .

在上图中,我们有矩形x,y和z。星号是我们新多边形的外围角落。

答案 2 :(得分:0)

矩形轴是否对齐?如果是这样,你可以试试这个。排序沿一个轴开始和结束(让我们说x),然后保持一个连续间隔列表 - 按y排序的点,每个间隔有一个整数'绕组数' (最初是ymin..ymax,0)。然后当你沿着x处理下一个边缘时,你会发现它与之重叠的现有间隔,在末端分割出它们,然后更新(前边缘的++, - 后边缘的边缘)它们的缠绕数量。例如:

 0000111111122222111000
+000++++++++++000000000
=0001222222233222111000
    1                   (perimeter update)

要打开边缘,请在周长上添加1号绕组的新间隔。关闭 - 为0.为了提高效率,您还可以合并具有相同绕组数的间隔。

然后为y做同样的事。