function setConvertRadial(ax, polarLayout) {
    var subplot = polarLayout._subplot;

    ax.setGeometry = function() {
        var rl0 = ax._rl[0];
        var rl1 = ax._rl[1];

        var b = subplot.innerRadius;
        var m = (subplot.radius - b) / (rl1 - rl0);
        var b2 = b / m;

        var rFilter = rl0 > rl1 ?
            function(v) { return v <= 0; } :
            function(v) { return v >= 0; };

        ax.c2g = function(v) {
            var r = ax.c2l(v) - rl0;
            return (rFilter(r) ? r : 0) + b2;
        };

        ax.g2c = function(v) {
            return ax.l2c(v + rl0 - b2);
        };

        ax.g2p = function(v) { return v * m; };
        ax.c2p = function(v) { return ax.g2p(ax.c2g(v)); };
    };
}
setConvert for polar axes!

@param {object} ax
  axis in question (works for both radial and angular axes)
@param {object} polarLayout
  full polar layout of the subplot associated with 'ax'
@param {object} fullLayout
  full layout

Here, reuse some of the Cartesian setConvert logic,
but we must extend some of it, as both radial and angular axes
don't have domains and angular axes don't have _true_ ranges.

Moreover, we introduce two new coordinate systems:
- 'g' for geometric coordinates and
- 't' for angular ticks

Radial axis coordinate systems:
- d, c and l: same as for cartesian axes
- g: like calcdata but translated about `radialaxis.range[0]` & `polar.hole`

Angular axis coordinate systems:
- d: data, in whatever form it's provided
- c: calcdata, turned into radians (for linear axes)
     or category indices (category axes)
- t: tick calcdata, just like 'c' but in degrees for linear axes
- g: geometric calcdata, radians coordinates that take into account
     axis rotation and direction

Then, 'g'eometric data is ready to be converted to (x,y).