【问题标题】:How to draw an outline of a group of multiple rectangles?如何绘制一组多个矩形的轮廓?
【发布时间】:2014-06-04 14:53:32
【问题描述】:

我需要绘制一组相邻放置的矩形的封闭多边形。

让我们考虑至少与至少一个其他矩形共享一个边缘(或部分边缘)的文本字段。 我可以得到矩形点的坐标,所以我基本上有我需要的关于它们的任何数据。

你能想出一个简单的算法/程序来围绕这些对象绘制一个多边形(连接的直线路径)吗?

这里展示了不同的潜在情况(A、B、C 等...)。在示例 A 中,我还绘制了一个蓝色多边形,这是我需要绘制的路径,勾勒出矩形组。

我在这里读过关于凸包和类似的东西,但实际上,这看起来是一个简单得多的问题。 我想到的一个(开始)解决方案是,我实际需要绘制的点只是任何一对矩形都不共享的点,这意味着作为多个矩形顶点的点是多余的。我找不到的是我需要从一条线到另一条线的顺序。

我目前致力于目标 c,但任何其他语言或算法都会受到赞赏,包括伪。

谢谢!

【问题讨论】:

    标签: objective-c algorithm graphics geometry convex-polygon


    【解决方案1】:

    恕我直言,应该是这样的。制作一个边缘列表,看看是否有一些重叠:如果矩形与 x,y 轴对齐,这应该很简单。您只需找到顶点在相同 x 或 y 上的边,而其他坐标需要介于两者之间。在此之后,剩余的边缘应该形成轮廓。

    另一种找到公共边的方法是沿每个 x 和 y 轴打断所有有顶点的矩形。这应该看起来好像您将所有行都增长到无穷大。在此之后,所有公共边都将具有公共顶点并且可以被消除。

    【讨论】:

      【解决方案2】:

      您有两行和三个不同的y-值。假设y0 是顶部,y2 是底部,y1 标记两行之间的中间。
      每行都有一个最大值和一个最小值,假设顶行从x0_minx0_max,底行从x2_minx2_max。鉴于这些值,您只需围绕事物绘制:

      (x0_min,y0)->
      (x0_max,y0)->
      (x0_max,y1)->
      (x2_max,y1)->
      (x2_max,y2)->
      (x2_min,y2)->
      (x2_min,y1)->
      (x0_min,y1)->
      (x0_min,y0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 2013-12-03
        • 2012-03-16
        • 2012-02-03
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        相关资源
        最近更新 更多