|
 |
.. but can't figure it out at the moment.
I'm looking for a macro that returns a value based on an input value
(Val) within a given input range (iMin to iMax), the ReturnVal has to
be in the range oMin, oMax.
Kind of like the "how to create random numbers in a range other than 0
to 1". But then with a arbitrary input range.
#macro RVal(iMin, iMax, Val, oMin, oMax)
.
.
ReturnVal
#end
Ingo
--
Photography: http://members.home.nl/ingoogni/
Pov-Ray : http://members.home.nl/seed7/
Post a reply to this message
|
 |
|
 |
ingo wrote in message ...
>I'm looking for a macro that returns a value based on an input value
>(Val) within a given input range (iMin to iMax), the ReturnVal has to
>be in the range oMin, oMax.
>Kind of like the "how to create random numbers in a range other than 0
>to 1". But then with a arbitrary input range.
Here you are:
#macro RVal(iMin, iMax, Val, oMin, oMax)
#local v = (Val - iMin) / (iMax - iMin);
(oMin + (oMax - oMin) * v)
#end
The first line gives you a [0,1] value and the second "returns" the result.
E.g.
#declare qqq = RVal(0., 1., .4, 10, 20);
which expanded becomes:
#declare qqq = (10 + (20 - 10) * (.4 - 0) / (1 - 0));
(If I got the parenthesis right!!!)
BTW, ALWAYS put between () the return value, otherwise calls like this would
be wrong:
RVal(....) * 10
which has to be (...) * 10 and NOT oMin + (oMax - oMin) * v *10!
Bye!!!
Alessandro Coppo
P.S: have a look at POVRay documentation, this function call/procedure call
hybrid nature is well explained in #macro help.
Post a reply to this message
|
 |
|
 |
In article <3ab3485a@news.povray.org>, "Alessandro Coppo"
<a.c### [at] iol it> wrote:
> Here you are:
> #macro RVal(iMin, iMax, Val, oMin, oMax)
> #local v = (Val - iMin) / (iMax - iMin);
>
>
> (oMin + (oMax - oMin) * v)
> #end
Why not simplify it to this?
#macro RVal(iMin, iMax, Val, oMin, oMax)
(oMin + (oMax - oMin)*((Val - iMin)/(iMax - iMin)))
#end
BTW, here are the macros I use for the same thing:
// Range handling macros
#macro Clamp(V, Min, Max) (min(Max, max(Min, V))) #end
// clamps a number to the range [Min, Max]. Values above Max return Max,
below Min return Min.
#macro Range(V, Rmn, Rmx) (V*(Rmx-Rmn) + Rmn) #end
// adjusts input values in the range [0, 1] to output values in range
[Rmn, Rmx].
#macro RRange(V, Rmn, Rmx, Min, Max) (((V-Rmn)/(Rmx-Rmn))*(Rmx-Rmn) +
Rmn) #end
// adjusts values in a specified range [Rmn, Rmx] to the specified range
[Min, Max]
--
Christopher James Huff
Personal: chr### [at] mac com, http://homepage.mac.com/chrishuff/
TAG: chr### [at] tag povray org, http://tag.povray.org/
<><
Post a reply to this message
|
 |