[PD] scale maxlib/gem
Frank Barknecht
fbar at footils.org
Sat Oct 16 22:26:05 CEST 2004
Hallo,
CK hat gesagt: // CK wrote:
> right I was about to whip one up but then I felt a bit stupid cloning
> an abstraction by reading c code of an external ;)
It's not difficult math, it's easy to understand if visualised.
Please turn on a non-proportional font:
^
|
y1.....+......+
| . / .
| . / .
| . / .
| . / .
| ./ .
y0.....+......+ Figure 1.
| . .
| . .
+-----x0-----x1--->
The slope "k" of the line connecting (x0,y0) and (x1,y1) is given as:
k = (y0-y1)/(x0-x1)
(In rrad.scale.pd this is a sender called "$0-k")
Now if x0 = y0 = 0 the formula to find y out of x would be very easy:
y = f(x) = k*x
Normally x0 and y0 are not 0. Assuming y0 not equals 0, but x0 = 0:
^
|
y1......+
| / .
| / .
| / .
| / .
| / .
y0......+ Figure 2.
| .
| .
+------x1--->
x0=0
You see, that now the curve simply is found by adding y0 to every
value found by the simplest formula and thus shifting the line
upwards (or downwards, if y0 < 0):
y = k*x + y0
To handle the x-shift similarily, lets look again at figure 1:
^
|
y1.....+......+
| . / .
| . / .
| . / .
| . / .
| ./ .
y0.....+......+
| . .
| . .
+-----x0-----x1--->
Compared with the previous figure, note that every x in the range from
x0 to x1 actually results in the same y values from figure 2, only the
x values are bigger by x0. We can counter this by first substracting
x0 from our input x and basically transforming Figure 1 into Figure 2
on the way, so we can then use the formula from above again:
y = k*x + y0 using x -> x-x0
==> y = k*(x-x0) + y0
Or in linear function lingo using:
k = m
b = y0 - k*x0
it would be:
y = mx + b
Voila. [scale] done in math. Scaling exponential is a bit harder, but
not much different. You can always look at scale.c ;)
Ciao
--
Frank Barknecht _ ______footils.org__
More information about the Pd-list
mailing list