class Voronoi{ int NUMPOINTS; int order; ArrayList initialPoints; ArrayList initialSegments; ArrayList bisectors; ArrayList borders; ArrayList bisectorIntersections; ArrayList cells; color fillColor; color strokeColor; Voronoi(final ArrayList points, final ArrayList borders, final int o, final color fc,final color sc){ order=o; NUMPOINTS=points.size(); initializeLists(); this.borders=borders; initialPoints=points; generateInitialSegments(); generateBisectors(); generateBisectorIntersections(); generateVoronoiSegments(); fillColor=fc; strokeColor=sc; clearConstruction(); } void draw(float sc){ Iterator cellItr =cells.iterator(); while(cellItr.hasNext()){ ((Cell)cellItr.next()).draw(sc); } } void draw(int steps,float sc){ Iterator cellItr =cells.iterator(); while(cellItr.hasNext()){ ((Cell)cellItr.next()).draw(steps,sc); } } void drawRounded(float sc){ Iterator cellItr =cells.iterator(); while(cellItr.hasNext()){ ((Cell)cellItr.next()).drawRounded(sc); } } void initializeLists(){ initialPoints = new ArrayList(); initialSegments = new ArrayList(); bisectors = new ArrayList(); bisectorIntersections = new ArrayList(); cells = new ArrayList(); } void clearConstruction(){ initialSegments.clear(); bisectors.clear(); bisectorIntersections.clear(); } void generateInitialSegments(){ for(int i=0;i0.1f)){ intersect = true; break; } } if(!intersect){ Point2D peripheryPoint = new Point2D(currentSweepPoint); periphery.add(peripheryPoint); } } } segmentItr = borders.iterator(); while(segmentItr.hasNext()){ Segment2D currentSegment = (Segment2D)segmentItr.next(); Iterator sweepPointItr = currentSegment.points.iterator(); while(sweepPointItr.hasNext()){ Point2D currentSweepPoint = (Point2D)sweepPointItr.next(); Segment2D currentSweepRay = new Segment2D(currentCenterPoint,currentSweepPoint); Iterator sweepSegmentItr = currentCenterPoint.belongsToSegment.iterator(); boolean intersect = false; while(sweepSegmentItr.hasNext()){ Segment2D currentSweepSegment =(Segment2D)sweepSegmentItr.next(); Segment2D currentSweepBisector=currentSweepSegment.bisector; Point2D sweepIntersection = segmentIntersectionWithSegment(currentSweepRay, currentSweepBisector); if ((sweepIntersection!=null)&&(dist(sweepIntersection,currentSweepPoint)>0.1f)){ intersect = true; break; } } if(!intersect){ Point2D peripheryPoint = new Point2D(currentSweepPoint); periphery.add(peripheryPoint); } } } Cell cell = new Cell(currentCenterPoint.convertToPoint2D()); cell.periphery.addAll(periphery); cell.update(); cells.add(cell); } } }