【问题标题】:Java libGDX - merge polygonsJava libGDX - 合并多边形
【发布时间】:2014-01-04 10:53:33
【问题描述】:

我正在做一个水下游戏,那里有一些废墟,由块组成。 目前,我正在检查与潜艇的多边形和废墟的每个块的碰撞,并使用一个函数返回我制作的矩形的顶点。

public static float[] rectangleToVertices(float x, float y, float width,
            float height) {
        float[] result = new float[8];
        result[0] = x;
        result[1] = y;

        result[2] = x + width;
        result[3] = y;

        result[4] = x + width;
        result[5] = y + height;
        result[6] = x;
        result[7] = y + height;

        return result;
    }

我认为这不是很有效,有些废墟超过 10 个方块,我不想检查单个物体的 10 次碰撞。 有没有办法将更多的多边形合并成一个?

这张图更能说明问题:

红色区域是多边形。

【问题讨论】:

标签: java merge polygon


【解决方案1】:

如果我理解您的问题,您将删除 shared 边。

最简单的解决方案是从一个块开始,将其边缘添加到HashSet(比如 S1)。然后,在遍历块列表时,检查是否有任何其他块共享来自 S1 的任何边。如果是,则将该块的所有边添加到 S1。对于 S1 中已经存在的边,将它们添加到另一个 HashSet(比如 S2)以跟踪这些边。最后,计算 S1-S2,这将是您想要的边集。使用这些边重建您的最终多边形。

顺便说一句,您可能想看看The Skyline Problem‍​​

【讨论】:

  • 这将为每组相邻块生成一个“组”。您可以对剩余的块重复此操作,直到所有块都被分组。
  • 只要顶点对齐,这将起作用并对所有块进行分组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2017-10-16
相关资源
最近更新 更多