little formula to solve

BlitzMax Forums/BlitzMax Programming/little formula to solve

Hi lads, got a method here for my gui slider. Basically we have these numbers to work with:

- The Range of the slider.

These two variables could be between -1 to 1 or even 0 to 10. This is range1 and range2. They dictate the range of values the slider can have.

- The Value of the slider. This variable is a value between the range above.


What I want to do is use the two range variables and the value between that range to calculate a final percentage between 0 and 99. How do I do it?

Percentage = ((Value - Range1) * 100) / (Range2 - Range1)

Maybe something like this?
r = range2-range1
p = ((value-range1)/r)*99

p should now contain a value between 0 and 99

Not 100% sure it works. Didn't test it and I'm really tierd. I also have a cold wich makes it hard to think, sometimes. :P

Edity: I was also too slow writing this post.
2nd edit: Heh, removed a small typo in the code. :)

Haha! I saw that first version :)

Hic

The reason why the formulas above don't work is because they don't deal with a situation like -1 to 1 where the value is actually 0...

The problem is when you have a range of -1 to 1 and the value is 0... (in the middle) you multiply that by 100 and get 0 instead of the correct value of 50

Now can you see the problem with it?

Mine and Deps do work. Mine is slightly better since it would still work well with Ints.

Your example:

Percentage = ((Value - Range1) * 100) / (Range2 - Range1)
Percentage = (( 0 - -1 ) * 100) / ( 1 - -1 )
Percentage = (( 1 ) * 100) / ( 2 )
Percentage = 100 / 2
Percentage = 50

Offset = 0 - Range1
SValue = Value + Offset
Percent = SValue * 100 / (Range2 - Range1)

I think will work.

That does exactly the same:

SValue is the same as (Value - Range1)

Ha, shaken off the hangover, here you are :

Two functions, One will return the value at a given percentage of the slider. The other will return the percentage value of the slider for a given value.
For Local a = 0 To 99
	Print SliderValue(-2.0,4.0,a)
Next


Function SliderValue:Float(Range1:Float,Range2:Float,SliderValue:Float)
	Return (SliderValue * ((Range2 - Range1) / 100)) + Range1
End Function

Function SliderPercentage:Float(Range1:Float,Range2:Float,ActualValue:Float)
	Return  (ActualValue - Range1) / ((Range2 - Range1) / 100)
End Function


Thanks a lot :D

Much appreciated everyone.