[PD] log function in slider
Alexandre Torres Porres
porres at gmail.com
Wed Mar 19 01:12:37 CET 2014
Hey, a few things have made sense to me now.
The minimum and maximum values in PD are in a 100 / 1 ratio. This ratio is
important and it's a key in the formula. In the sense that if you have 10
and 1000, the plotting curve looks always the same. So if you forget about
the minimum and maximum values, you can just work with this ratio variable.
Something like:
[expr exp($f1 * log(ratio))]
Now this will give you a value from 1 to the value of "ratio". And I
thought it'd be cool to scale it from 0 to 1.
One thing that annoys me a lot is that the log function will not allow you
to start at zero. So I wanted to tweak this in order to make it so.
Not hard, something like this does the trick.
[expr exp($f1 * log(ratio) - 1) / (ratio -1)]
You can always rescale this by multiplying to any factor and summing to a
constant.
cheers
2014-03-18 19:27 GMT-03:00 Alexandre Torres Porres <porres at gmail.com>:
> cool, looks great
>
> by the way, this guy was helping me out with the math, so I don't really
> know what's going on that well.
>
> Apparently he couldn't figure out the slider height variable. And Roman
> didn't use that too.
>
> The formula was behaving the same as Roman's patch, but we simplified the
> formula now so it's more related to Roman's patch.
>
> It's something like this now
>
> [expr~ min_$0 * exp($v1 * log(max_$0 / min_$0))]
>
> then doing the inverse is not too complicated, just use "ln"
>
> I still have not much clue about the original code, the slider height
> variable and other things, but, anyhow, these were the equations I was
> looking for ;)
>
> cheers
>
>
> 2014-03-18 18:32 GMT-03:00 Jonathan Wilkes <jancsika at yahoo.com>:
>
> On 03/18/2014 04:05 PM, Alexandre Torres Porres wrote:
>>
>> and as I was checking before, not too far from raising to the power of
>> 0.25 (thicker line in the graph from the picture attached)
>>
>>
>> Btw-- here's what that patch looks like in Pd-l2ork (attached).
>>
>> The array rectangle is orange because it's selected. I also changed the
>> size of the garray by click-dragging with the mouse.
>>
>> -Jonathan
>>
>>
>>
>>
>> 2014-03-18 16:48 GMT-03:00 Alexandre Torres Porres <porres at gmail.com>:
>>
>>> the solution is as I thought, to just invert the given formula in the
>>> code. Someone helped me with the math, is something like
>>>
>>> expr ln($f1 / 1.27) / (((log(127 / 1.27) / 1.27)) * 0.01)
>>>
>>> here's a patch attached
>>>
>>> I'm finally gonna check what kind of curve this thing gives :)
>>>
>>> Thanks everyone
>>>
>>> Cheers
>>>
>>>
>>> 2014-03-18 5:13 GMT-03:00 Jonathan Wilkes <jancsika at yahoo.com>:
>>>
>>> No, the code I ported is from vslider_set and vslider_draw_update
>>>> (might be different in Vanilla).
>>>>
>>>> In vslider_bang, math is done to output the proper value. Without
>>>> looking at the code I would have guessed vslider_bang simply outputs a
>>>> stored value like [float] does. Then just do math to set the slider
>>>> position or calculate a new stored value from mouse input.
>>>>
>>>> -Jonathan
>>>>
>>>>
>>>> On Monday, March 17, 2014 1:21 AM, Alexandre Torres Porres <
>>>> porres at gmail.com> wrote:
>>>> Hi Roman. This is turning out trickier than I thought. A friend
>>>> explained the code to me and got to the following equation, with min/max
>>>> values as 0.01 and 1 respectively.
>>>>
>>>> [expr 0.01 * exp((log(1 / 0.01) / 0.01) * $f1 * 0.01)]
>>>>
>>>> For what I've checked, it seems to behave like your patch. But it
>>>> doesn't do the trick I'm looking for yet. I sent a patch earlier, and I'm
>>>> sending it back again.
>>>>
>>>> The goal is to connect a linear slider to an [expr] (with this so
>>>> called "log" function) and then to another linear slider. The idea then is
>>>> that this second slider behaves as one that was set as being "log".
>>>>
>>>> In the patch attached I was able to emulate it poorly with [pow
>>>> 0.25], but that was before reaching the list. See that if I use this expr
>>>> function from the code or your patch it presents quite a different behavior.
>>>>
>>>> maybe it is some sort of inversion of this equation, not sure.
>>>> Apparently this code converts the "log" function values to linear and I'm
>>>> hoping to get the exact opposite. Got it?
>>>>
>>>> Thanks for looking into this
>>>>
>>>>
>>>> 2014-03-12 4:38 GMT-03:00 Roman Haefeli <reduzent at gmail.com>:
>>>>
>>>> On Don, 2014-03-06 at 21:37 -0300, Alexandre Torres Porres wrote:
>>>> > hi folks, out of curiosity, what's the exact log function used in the
>>>> > slider? I'd like to emulate it.
>>>>
>>>> I am not sure, if this is what you want. It converts the incoming
>>>> linear
>>>> range between 0 and 1 to a logarithmic range specified by $1 and $2,
>>>> respectively by the second and third inlet. They behave like the lower
>>>> and upper bound specified in the [vslider]/[hslider] classes.
>>>>
>>>> https://raw.github.com/reduzent/netpd2-patches/master/abs/rh_scalelog.pd
>>>>
>>>>
>>>> Roman
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Pd-list at iem.at mailing list
>>>> UNSUBSCRIBE and account-management ->
>>>> http://lists.puredata.info/listinfo/pd-list
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Pd-list at iem.at mailing list
>>>> UNSUBSCRIBE and account-management ->
>>>> http://lists.puredata.info/listinfo/pd-list
>>>>
>>>>
>>>>
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20140318/696f7d3c/attachment-0001.htm>
More information about the Pd-list
mailing list