http://www.perlmonks.org?node_id=899463

clinton has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to come up with a formula that I can use to represent distance from a central point, and will return a boost value in a range, eg 0..10.

This formula can accept two (or maybe 3) variables:

  1. importance: this controls the upper limit of the range, eg 0..10, 0..100
  2. radius: ie any distance within this inner radius should be pretty much as important as any other point within this radius
  3. dropoff: (optional) how quickly the boost should drop off as distance increases

My basic formula is:

boost = importance / ((radius + distance) ** dropoff)
For instance, an importance of 100, a dropoff of 0.5 and a radius of 0 gives me a curve like:
16 : @@@@@@@@@@@@@@@@@@@@@@@@@ 32 : @@@@@@@@@@@@@@@@@ 64 : @@@@@@@@@@@@ 128 : @@@@@@@@ 256 : @@@@@@ 512 : @@@@ 1024 : @@@ 2048 : @@ 4096 : @ 8192 : @
But with a radius of 1000, I get a much smaller range:
16 : @@@ 32 : @@@ 64 : @@@ 128 : @@ 256 : @@ 512 : @@ 1024 : @@ 2048 : @ 4096 : @ 8192 : @

I would like to change the formula to make the upper limit of the range dependent only on importance and not on radius. For the life of me I can't figure out how to do that.

PS: distance can be considered to have an upper limit of, eg, 10,000km if that helps

PPS: As an optional extra, it would be nice to be able to configure the rate of dropoff without affecting the upper limit of the range, but I can live without it