I am having the following issue: I need to let users graphically interact with parameters of a curve in a 2-dimensional graph to do manual curve fitting. Some parameters are straightforward such as "min" and "max" asymptotes (also called A and K in the generalized logistic function) because they have an obvious 1:1 mapping with graphical elements, but others do not and I need to find a way to represent them graphically anyway. For instance, one of the parameters represents the growth of the curve at the inflection point but while it is proportional to the gradient at that point it does not correspond to it. Even more damning, sometimes that parameter and its graphical representation (the gradient of the curve) are not even of the same sign, and thus the only relationship that is consistent between the parameter and its graphical representation is that incrementing/decrementing the parameter by a small value produces a small non-linear change in the curve.
For reference, the curve looks like this:
And the parameter in question controls the rate of growth at the inflection point (the point where x = 0 on that curve). Modifying the parameter has a lot of impact on the curve when it's close to 0 but the further it gets from 0 the (exponentially) less impact it has as the curve converges towards a step function.
To summarize, my issues are the following:
- I need to manipulate a hidden parameter from the effect it has on a curve
- The mapping between the parameter and the curve is not obvious (it cannot be 0, and it converges towards a step function, and the interaction is sometimes reversed)
Has this kind of problem been solved before and is there an obvious solution I am glossing over? So far I have tried the following:
- A wheel that the user could drag and where I used the angular distance between the place they clicked and the place they released the click to calculate by how much I should increment/decrement the parameter. It didn't really work in practice because the users expected that angle to be exactly by how much the gradient would increase/decrease.
- A slider between two approximated extremums: small positive (negative in the case of negative growth) value and some arbitrary positive (negative in the case of negative growth) big value (here I used max asymptote - min asymptote). The issue here was that adding a linear delta to the parameter meant that only a very small part of the slider led to interesting changes.
- A simple "steepen/flatten" pair of buttons with a look-ahead test to see whether it does what it says it does and the option to long click the button in order to change the curve from one extreme to another. I have yet to investigate how to change the magnitude of delta based on how close the parameter is to 0 (so as to not make the interaction too tedious in cases where the original curve is already extremely steep) but as of now it's the only thing that is more or less working.