import processing.opengl.*; int NUMPOINTS; int MAXORDER; ArrayList voronoiCrystals; ArrayList borders; boolean DRAWING; void setup(){ size(600,1000,OPENGL); background(255); //smooth(); NUMPOINTS=5; MAXORDER=4; hint(ENABLE_OPENGL_4X_SMOOTH); reset(); } void reset(){ generateBorders(); voronoiCrystals=new ArrayList(); Voronoi mainVoronoi=new Voronoi(NUMPOINTS,borders,0,color(255));//color(100,100,100,255)); VoronoiCrystal mainCrystal = new VoronoiCrystal(mainVoronoi,MAXORDER,0); voronoiCrystals.add(mainCrystal); divide(mainCrystal); DRAWING=true; } void draw(){ if(DRAWING){ translate(width/2,height+50,-500); rotateX(PI/2.3f); rotateZ(-PI/6.0f); translate(-width/2,-width/2); background(245,245,255); directionalLight(255, 253, 252,-1.0f, -0.5f, -1); Iterator crystalItr = voronoiCrystals.iterator(); while(crystalItr.hasNext()){ ((VoronoiCrystal)crystalItr.next()).draw(); } } DRAWING=false; } void generateBorders(){ borders = new ArrayList(); ArrayList borderPoints = new ArrayList(); Segment2D border=new Segment2D(); border=new Segment2D(0,0,width-1,0,0); borders.add(border); border=new Segment2D(0,height-1,0,0,1); borders.add(border); border=new Segment2D(width-1,0,width-1,height-1,2); borders.add(border); border=new Segment2D(width-1,height-1,0,height-1,3); borders.add(border); } void generateBorders(ArrayList periphery){ borders = new ArrayList(); for(int i=0;iperiphery.size()-1)nexti=0; Point2D pointj=(Point2D)periphery.get(nexti); borders.add(new Segment2D(pointi,pointj)); } } void divide(final VoronoiCrystal voronoiCrystal){ if((voronoiCrystal.order