我正在开发一个使用 Voronoi 创建地图的 Java 程序。我正在使用一个生成 Voronoi 的 Java 库,它非常快(http://sourceforge.net/projects/simplevoronoi/)。
我面临的问题是,然后,我必须扫描每个 Voronoi 边缘以了解边缘左侧和右侧的点,以创建包含每个点的多边形。它是包含每个 Voronoi 边的类:
public class GraphEdge
{
public double x1, y1, x2, y2;
public int site1;
public int site2;
}
坐标x1, y1, x2, y2
是边缘的开始和结束坐标,site1
和site2
是边缘左侧和右侧的点的索引。因此,要创建包含每个点的多边形,我这样做:
for(int n = 0; n < xValues.length; ++n){
polygonsList.add(new GPolygon());
for(GraphEdge mGraphEdge : edgesList){
if( (xValues[mGraphEdge.site1] == xValues[n] || xValues[mGraphEdge.site2] == xValues[n])
&& (yValues[mGraphEdge.site1] == yValues[n] || yValues[mGraphEdge.site2] == yValues[n]) ){
polygonsList.get(n).addPoint((int)mGraphEdge.x1, (int)mGraphEdge.y1);
polygonsList.get(n).addPoint((int)mGraphEdge.x2, (int)mGraphEdge.y2);
}
}
}
WherexValues
和yValues
是我生成 Voronoi 图的点坐标,并且GPolygon
是我创建的 Polygon 类,它从java.awt.Polygon
. 这些是我测量的时间:
- Voronoi 时间: 283 mS(生成 Voronoi 图的时间)
- 多边形搜索时间: 34589 毫秒(完成生成多边形的 for 循环的时间)
- 多边形填充时间: 390 毫秒(填充多边形并保存到图像的时间,这是可选的)
- 点数: 26527(生成 Voronoi 的点数)
- 地图生成完成
- 多边形数量: 26527(多边形数量,每个点一个)
如您所见,与其他时间相比,时间确实很重要,如何加快 for 循环?我还有什么其他选择?非常感谢您提前。