Math-Project3D
view release on metacpan or search on metacpan
lib/Math/Project3D.pm view on Meta::CPAN
# Calculate every range's length and store it in @lengths.
my @lengths = map {
# upper - lower / increment
int( ($_->[1] - $_->[0]) / $_->[2] ),
} @ranges;
# Prepare counters for every range.
my @counters = (0) x scalar(@ranges);
# Calculate the number if iterations needed.
# It is $_+1 and not $_ because the lengths are the lengths we
# need for the comparisons inside the long for loop. We save one
# op in there that way.
my $iterations = 1;
$iterations *= ( $_ + 1 ) for @lengths;
# For all possible combinations of parameters...
for (my $i = 1; $i <= $iterations; $i++) {
# Get current function parameters
my @params;
# Get one parameter for every range
for (my $range_no = 0; $range_no < @ranges; $range_no++) {
# lower + increment * current_count
push @params, $ranges[$range_no][0] +
$ranges[$range_no][2] * $counters[$range_no];
}
( run in 1.555 second using v1.01-cache-2.11-cpan-71847e10f99 )