sub generate_coordinate { my $fDensity = shift; my @coordinate; { @coordinate = (rand, rand); redo if $fDensity->(rand, @coordinate); } return @coordinate; } sub density_uniform { 1 } sub density_h_gradient { $_[0] < $_[2] } sub density_v_gradient { $_[0] < $_[1] } sub density_broken [ 0 } sub density_lookup { my ($chk, $r, $c) = @_; return $lookup_table[$r][$c]<$chk; }