Java libGDX - 合并多边形

标签 java merge polygon

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

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 个方 block ,而且我不想检查单个物体的 10 次碰撞。 有没有办法将多个多边形合并为一个?

这张图可以更好的解释: enter image description here

红色区域是多边形。

最佳答案

如果我理解你的问题,那么你正在删除共享边。

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

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

关于Java libGDX - 合并多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20919993/

相关文章:

merge - 两个Google Analytics(分析)帐户

TFS 将变更集合并到具有挂起变更的文件中

mysql - MySQL 或 SQLite 是否支持 'INSERT OR UPDATE' 语句?

algorithm - 创建通过所有给定点的凹多边形

python - 从多边形到 geopandas 中的点的距离

java - 实例化 java.io.File 以从类路径读取资源

java - Weblogic 12c粘性问题

java - 编译java servlet程序时出错

java - 如何获得 JList 的选定项目列表?

python - gCentroid (rgeos) R 与实际质心(Python 中)