Math.ratio



  • Simple one here, adding a math function that I end up using in most projects.

    Converting one variable in a given range, to the equivalent value in another range via:

    NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin

    Easy to use my own function, but I'm sure this is one many would benefit from and likely already use.

    Final output would look something like:

    Math.rangeRatio(input, oldmin, oldmax, newmin, newmax)



  • I think the math functions in HISE are just wrapper for the JUCE math library, so it would require a little more work to add a custom function (I might be wrong though).

    I also seem to recall with this function that if oldMax - oldMin == 0 the function returns the wrong result, so you have to handle that separately.

    This is from my KSP library

    //Maps a given value in a given range of values to that of another range of values
    taskfunc units.rescale(value, oldmin, oldmax, newmin, newmax) -> return
        
        declare local old_range
        declare local new_range
    
        old_range := oldmax - oldmin
    
        if (old_range = 0)
            return := newmin
        else
            new_range := newmax - newmin
    
            return := (((value - oldmin) * new_range) / old_range) + newmin        
        end if
    
    end taskfunc
    


  • @d-healey

    Yeah you do need to handle it if the old range is 0, which is a very, very fringe case though since you'd need to call the function intentionally, without having a previous range at all!



  • @LightandSound @d-healey In what kind of situation would you have the oldRange equal to 0?
    Variable range going from negative to positive value?



  • @ustk that's why I say it's a fringe case, essentially if you set them as variables or for example use getvalue() without setting the min/max value of the panel then you could run in to problems. But there shouldn't be a 'real world use' for a range of 0 to a larger range, since all that does is spit out the same value. It's just to protect for the inevitable case where human error gets in the way.


Log in to reply
 

13
Online

648
Users

2.6k
Topics

21.5k
Posts