Driving variables through a complicated space

Consider that we have unconstrained input variables x1,...,xn, and derived variables y1,...,ym which are a function of the xi and satisfy a relatively complicated constraint.

    y1 = f1(x1,...,xn)
    y2 = f2(x1,...,xn)
    ...
    ym = fm(x1,...,xn)

Writers that update the unconstrained input variables are able to easily drive the output variables through a complicated space.

Example

Consider this simple example where some sliders are used to specify a point inside a circle of radius R. Even though there are weak constraints on the slider positions, the point is constrained to be inside the circle. i.e. (x,y) satisfies x2 + y2 < R2.

This is achieved using a polar coordinate representation (r,θ) for the base variables, and x,y are read-only derived variables. The set of valid values of (r,θ) can be written as a Cartesian product [0,R) × [0,2π). This means that the base variables can be updated independently, without a risk of breaking the integrity constraint.

radius:

angle: