note
kennethk
Based on your post and discussion with [BrowserUk], my first thought is a Gaussian - see [wp://Normal_distribution]. The functional form gives you a width parameter and the normalization is known, so it will satisfy your importance and radius requirements. You could probably implement your boost parameter by modifying the exponent on x. Perhaps something like:
<c>#!/usr/bin/perl -w
use warnings;
use strict;
sub boost {
my ($x, $importance, $radius, $drop) = @_;
return $importance * exp( -($x/$radius)**$drop );
}
my $imp = 1000;
my $rad = 100;
my $drop = 1;
for (map 2**$_, 1..15) {
my $boost = boost($_, $imp, $rad, $drop);
my $bar = "@" x ($boost/$imp*50);
printf "%6d %s %.1f\n", $_, $bar, $boost;
}
__END__
2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 980.2
4 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 960.8
8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 923.1
16 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 852.1
32 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 726.1
64 @@@@@@@@@@@@@@@@@@@@@@@@@@ 527.3
128 @@@@@@@@@@@@@ 278.0
256 @@@ 77.3
512 6.0
1024 0.0
2048 0.0
4096 0.0
8192 0.0
16384 0.0
32768 0.0
</c>
<p><b>Update:</b> Fixed typo in call order.
899463
899463