我正在一个水下游戏中工作,那里有一些用块砌成的废墟。 目前,我正在检查与潜艇的多边形和废墟的每个块的碰撞,其中一个函数返回我所做的矩形的顶点。
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次。 有没有办法将更多的多边形合并为一个?
这张照片可以更好地解释:
红色区域是多边形。
答案 0 :(得分:1)
如果我理解了您的问题,那么您将删除shared
边缘。
最简单的解决方案是从一个块开始,将其边添加到HashSet
(比如S1)。然后,在遍历块列表的同时,检查这些其他块中的任何一个是否与S1共享任何边缘。如果是,请将该块的所有边添加到S1。对于已经存在于S1中的边缘,将它们添加到另一个HashSet
(比如S2)以跟踪这些边缘。最后,计算S1-S2,它将是您想要的边缘集合。使用这些边缘重建最终的多边形。
顺便说一句,您可能需要查看The Skyline Problem。