Java libGDX - 合并多边形

时间:2014-01-04 10:53:33

标签: java merge polygon

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

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次。 有没有办法将更多的多边形合并为一个?

这张照片可以更好地解释: enter image description here

红色区域是多边形。

1 个答案:

答案 0 :(得分:1)

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

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

顺便说一句,您可能需要查看The Skyline Problem‍​​