Beispiel #1
0
function checkAsymptote (d0, d1, meta, sign, level) {
  if (!level) {
    return {
      asymptote: true,
      d0: d0,
      d1: d1
    }
  }
  var i
  var n = 10
  var x0 = d0[0]
  var x1 = d1[0]
  var samples = linspace(x0, x1, n)
  var oldY, oldX
  for (i = 0; i < n; i += 1) {
    var x = samples[i]
    var y = evaluate(meta, 'fn', {x: x})

    if (i) {
      var deltaY = y - oldY
      var newSign = utils.sgn(deltaY)
      if (newSign === sign) {
        return checkAsymptote([oldX, oldY], [x, y], meta, sign, level - 1)
      }
    }
    oldY = y
    oldX = x
  }
  return {
    asymptote: false,
    d0: d0,
    d1: d1
  }
}
export const bezier = (startPoint, endPoint, extend, num=15) => { // returns Bezier curve starting at first point in pair, curving towards the second point in pair and
  const midPoint = computeMidpoint(startPoint, endPoint, extend);
  const pathControl = [startPoint, midPoint, endPoint];
  const N = _range(pathControl.length); // number of points in [start, mid, end] that will be used to compute the curve
  const t = linspace(0.0, 1.0, num); // num points spaced evenly between fractions of the total curve path (0 = beginning, 1 = end)

  const curve = [];
  _range(num).forEach((i) => {
    curve[i] = {x: 0, y: 0};
  });

  N.forEach((ii) => { // iterate over provided points
    const B_func = bernstein(N.length - 1, ii); // get Bernstein polynomial
    const tB = t.map(B_func); // apply Bernstein polynomial to linspace
    const P = [pathControl[ii].x, pathControl[ii].y];
    const prod_idx = outerProducts([_range(tB.length), _range(P.length)]); // get indices for outer product

    _range(curve.length).forEach((j) => { // iterate over future curve, adjust each point's coordinate
      curve[j].x += tB[prod_idx[j][0]] * P[prod_idx[j][1]]; // update x coordinate for curve with outer product
      curve[j].y += tB[prod_idx[j+num][0]] * P[prod_idx[j+num][1]]; // update y coordinate for curve with outer product
    });
  });

  return curve;

};
Beispiel #3
0
 space: function (chart, range, n) {
   var lo = range[0]
   var hi = range[1]
   if (chart.options.xAxis.type === 'log') {
     return logspace(log10(lo), log10(hi), n)
   }
   // default is linear
   return linspace(lo, hi, n)
 },
var linspace = require('linspace');

var t = linspace(-1,1.2,2000);
var x = (Math.pow(t, 3)) + (0.3 * (Math.random() * 2000));
var y = (Math.pow(t, 6)) + (0.3 * (Math.random() * 2000));

var trace1 = {
  x: x, 
  y: y, 
  mode: "markers", 
  name: "points", 
  marker: {
    color: "rgb(102,0,0)", 
    size: 2, 
    opacity: 0.4
  }, 
  type: "scatter"
};
var trace2 = {
  x: x, 
  y: y, 
  name: "density", 
  ncontours: 20, 
  colorscale: "Hot", 
  reversescale: true, 
  showscale: false, 
  type: "histogram2dcontour"
};
var trace3 = {
  x: x, 
  name: "x density",