Source

boxer / lace-maker

Full commit
#!/opt/local/bin/perl
use warnings;
use strict;
use Data::Dumper;
use Math::Geometry::Voronoi;

my $size = 300;
my $num = 200;
my $scale = 0.8;

my @points = map { [ rand $size, rand $size ] } 0..$num;

my $geo = Math::Geometry::Voronoi->new(points => \@points);
$geo->compute;

print <<"";
<!-- Created with lace-maker (http://trmm.net/) -->
<svg xmlns="http://www.w3.org/2000/svg">
<g transform="scale(3.543307)"><!-- scale to mm -->

POLY:
for my $poly ($geo->polygons)
{
	my $index = shift @$poly;
	my $count = @$poly;
	my $cx = 0;
	my $cy = 0;

	# Find the center point of the polygon.
	# Throw away any polygons that are outside of the box.
	for (my $i = 0 ; $i < $count ; $i++)
	{
		my ($x0,$y0) = @{ $poly->[$i+0] };
		$cx += $x0;
		$cy += $y0;

	}

	$cx /= $count;
	$cy /= $count;
	#printf STDERR "%.5f, %.5f\n", $cx, $cy;

	print <<"";
		<g transform	= "translate($cx,$cy)" >
		<path
			transform	= "scale($scale)"
			stroke		= "#ff0000"
			fill		= "none"
			stroke-width	= "0.1px"
			d		= "M

	for my $pt (@$poly)
	{
		my ($x,$y) = @$pt;
		$x -= $cx;
		$y -= $cy;
		print "$x,$y\n";
	}

	# Close the path
	print <<"";
		Z"/></g>

	#print Dumper($poly);
}


print <<"";
</g>
</svg>

__END__