我正在使用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);
}
}
}
凡xValues
和yValues
是点的坐标我从中产生Voronoi图和GPolygon
是一个多边形类我创建了从0延伸。这些是我测量次数:
- 沃罗诺伊时间: 283 MS(时间来生成Voronoi图)
- 多边形搜索时间: 34589 MS(时间来完成用于环路产生的多边形)
- 多边形填充时间: 390 MS(时间来填充的多边形,并保存到图像,这是可选的)
- 点数数量: 26527(点数从中维诺产生)
- 地图生成成品
- 多边形数量: 26527(多边形的数量,每点)
正如你所看到的比别人时间真的显著,我如何加快for循环?我还有什么其他的选择?非常感谢你提前。
为了优化工作代码,您可以考虑http://codereview.stackexchange.com –
谢谢!我可以同时发布两者吗? – Andres
如果事先知道其最终尺寸,请尝试将列表大小设置为适当的容量。 – assylias