【问题标题】:How to find overlapping areas?如何找到重叠区域?
【发布时间】:2020-04-08 13:25:51
【问题描述】:

我们的目标是找到从正交多边形的各个方面(北、西、东、南)获得的所有矩形。但是,我无法进一步了解具体实现。

这就是我到目前为止所做的。

首先:我有一个坐标列表(在 XML 文件中),我想将它们读入 Java 以确定多边形的点和边缘。

所以现在来解决我的主要问题。我想找到位于这个多边形内的所有矩形, [![多边形]从四面八方(北、东、南、西)开始。这一步我有问题。我突然想到使用 SweepLine 算法,但我不确定如何实现它以获得所需的结果(来自各个方面的重叠矩形)。为此,我画了这些照片以澄清我的意思。如果您来自多边形的北边,您会发现绿色矩形。 [![多边形中来自北边的矩形] 如果您来自多边形的西边,您会发现红色矩形。 [来自西边的多边形中的矩形] 和重叠的矩形.. [绿色和红色矩形重叠] 但是,我不确定如何以最简单的方式做到这一点。我研究了很多扫线算法,但我不确定如何实现它以及这是否是一种有效的方法。我的目标是找到这些矩形并以适当的方式保存它们,以便我可以将它们用于进一步的步骤(例如,在多边形中找到许多矩形重叠的位置)

也许有人可以帮助我。将不胜感激!

【问题讨论】:

  • 你只想数一数吗?它们是否允许重叠?如果是这样,您可以从所有向内指向的角到多边形的下一个边缘画线。然后您可以计算这些线切割另一条线的次数,并将其添加到原始多边形的其他角的数量中。然后将其除以 4,我认为应该是这样。
  • 谢谢。但是,光是数是不够的,我其实还需要找一个容器来保存……

标签: java


【解决方案1】:

如果您已经知道所有边并确定它们是朝北、朝南、朝东还是朝西,则可以这样确定矩形:

  • 遍历边缘。
    • 假设我们在 (n.x1, n.y) 和 (n.x2, n.y) 之间有一条朝北的边。对应的矩形的北边必须是我们刚刚看到的那个,并且它的南边必须至少部分地由一个或多个朝南的边组成。
    • 我们遍历所有朝南的边缘并找到边缘上的至少一个点的 X 坐标在 (n.x1, n.x2) 范围内的那些。
      • 此外,它们实际上需要位于朝北边缘的南部,因此请保留s.y > n.y 所在的位置。
    • 现在,我们剩下的是所有可能会限制矩形高度的朝南边的列表。但是,矩形受最接近的那个限制,因此我们只需选择剩余的朝南边 s,其 y 坐标最低。
    • 我们现在在 (n.x1, n.y) 和 (n.x2, s.y) 之间有了一个矩形。

每个大方向都实现了相应的逻辑。

【讨论】:

  • 谢谢!非常感激! :)
猜你喜欢
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多