nice math graphs

by Nivaldo

CoffeeScript

interpolator = d3.scale.log()
pointAtX = (a, b, x) ->
  interpolator
    .domain([a[0], b[0]])
    .range([a[1], b[1]])
  [x, interpolator(x)]

A = [15, 90]
B = [85, 40]
line = d3.svg.line()
p0 = pointAtX(A, B, 0)
p1 = pointAtX(A, B, 100)

line = d3.svg.line()
    .x( (d) -> d)
    .y( (d) -> pointAtX(A, B, d)[1])

svg = d3.select('body').append('svg')
svg
    .selectAll('g')
    .data(['linear', 'sqrt', 'log', 'quantize'])
    .enter()
    .append('g')
    .each (scaleType, i) ->
        interpolator = d3.scale[scaleType]()
        g = d3.select(@)
            .attr 'transform', "translate(#{180*(i%2)},#{Math.floor(i/2)*200})"
        
        g.append('path')
            .attr
                stroke: 'lightgrey'
                fill: 'none'
                d: line([1...100])

        # reference line
        interpolator = d3.scale.linear()
        g.append('path')
            .attr
                stroke: 'red'
                fill: 'none'
                d: line([15, 85])
        
        g.append('text').text(scaleType)
            .attr 'y', 20