# Simple function for damping (programming)

I'm programming a game and am looking to create a non-linear relationship between input and output, such that as the input increases, the output increases, but the higher the input value, the corresponding output increment is less and less.

I've looked at logarithms, and that seems to be the effect I'm looking at.

o = log(i), where o is the output value and i is the input value.

But this is too extreme - the curve is too steep. If I try to modify this with

o = log(i)k, where k is some constant multiplier, creates too steep of a curve in the lower end.

I'd like to find a way to make the falloff more gradual. Unfortunately, I can't seem to find any other functions in my programming language (ActionScript 3) that will do the trick.

Where should I be looking? Are there any functions I should be trying to replicate?

Thanks in advance - I realize this is a pure maths forum, but it seemed like the best place to ask.

-
What's the domain for your inputs, and what do you want the curve to look like at the lower end? It seems like you could simply move the logarithm to the left appropriately and that would resolve your problems... –  anon Aug 4 '11 at 3:18
the inputs would be positive real numbers. The curve should be fairly linear in the lower end. I'd like to then be able to "play" with the factor to tweak the slope of the curve. How do you "move the logarithm to the left?" log(i-n)? –  Tom Auger Aug 4 '11 at 3:32
You're close: $\log(\mathrm{input}+x)$, for some translation distance $x$. Try it out for yourself. (Have you heard of Wolfram|Alpha yet?) –  anon Aug 4 '11 at 3:34
If $\log i$ ultimately grows too slowly for you, you can try $i^k$ for some $k$ between $0$ and $1$, like $k=1/2$, or $1/3$. There is still the steepness problem, which can be fixed for example with $(1+i)^{1/3}-1$, which is in the spirit of what @anon suggested. You will need to fool around, tweak parameters until things look good. –  André Nicolas Aug 4 '11 at 3:54
@anon, wow Wolfram|Alpha is pretty sweet. So this formula gets me reasonable close: (log(n+30)-log(30))70 with the problem that the slope doesn't fall off to 0 at the outer end. That would be ideal. Note that I found that when you add to n, you have to subtract the log of that same amount in order to keep the line above 0 –  Tom Auger Aug 4 '11 at 4:20