pieces2 = BoundaryDiscretizeRegion /@
(Graphics`PolygonUtils`PolygonIntersection[#, Polygon[CirclePoints[100]]] &/@
MeshPrimitives[voronoi, 2]); // AbsoluteTiming // First
1.09499
(vs 33.0193 for pieces = ...
)
Show[pieces2]
With 1000 points it takes 11.3679
seconds to get pieces2
, and Show[pieces2]
gives: