View in color | License | Download script | History | Other scripts by: glennmlewis |
7-Sep 23:37 UTC
[0.044] 11.144k
[0.044] 11.144k
linear-interp.rREBOL [
Library: [
level: 'beginner
platform: 'all
type: 'tool
domain: [math scientific]
tested-under: none
support: none
license: 'lgpl
see-also: none
]
Title: "linear-interp"
Description: "Linearly interpolate between two numbers"
Date: 2006-11-08
Version: 0.0.1
Author: "Glenn M. Lewis"
File: %linear-interp.r
Purpose: {Linearly interpolate between two numbers}
License: "GNU Lesser General Public License (Version 2.1)"
Comment: {Makes it easy to transform a source from/to pair to a destination from/to pair}
]
linterp: func [
"Linearly interpolates from start to end, given an input from 0..1."
val [decimal!] "Val must run from 0..1"
start [number!] "When val==0.0, output==start"
end [number!] "When val==1.0, output==end"
] [
((1.0 - val) * start) + (val * end)
]
linear-interp: func [
"Linearly interpolates from outStart to outEnd, given an input from inStart to inEnd."
val [number!] "Val must run from inStart to inEnd"
inStart [number!] "When val==inStart, output==outStart"
inEnd [number!] "When val==inEnd, output==outEnd"
outStart [number!] "When val==inStart, output==outStart"
outEnd [number!] "When val==inEnd, output==outEnd"
/local diff newval
] [
if (inStart == inEnd) [ return 0.0 ]
diff: to-decimal (inEnd - inStart)
newval: ((val - inStart) / diff)
linterp newval outStart outEnd
] |