CurveUtil.js revision 82d0cf8c731b23f6a2fbb31e3e696e629444363e
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Utility class used for calculating curve points.
82d0cf8c731b23f6a2fbb31e3e696e629444363eTripp * @class CurveUtil
82d0cf8c731b23f6a2fbb31e3e696e629444363eTripp * @constructor
82d0cf8c731b23f6a2fbb31e3e696e629444363eTripp * Creates an array of start, end and control points for splines.
82d0cf8c731b23f6a2fbb31e3e696e629444363eTripp * @param {Array} xcoords Collection of x-coordinates used for calculate the curves
82d0cf8c731b23f6a2fbb31e3e696e629444363eTripp * @param {Array} ycoords Collection of y-coordinates used for calculate the curves
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @return {Object}
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp // Too few points, need at least two
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp return null;
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp // Special case, the Bezier should be a straight line
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if (l === 1)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[0].ctrlx1 = (2.0*xcoords[0] + xcoords[1])/3.0;
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[0].ctrly2 = (2.0*ycoords[0] + ycoords[1])/3.0;
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[0].ctrlx2 = 2.0*outpoints[0].ctrlx1 - xcoords[0];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[0].ctrly2 = 2.0*outpoints[0].ctrly1 - ycoords[0];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for (; i < l; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints.push({startx: Math.round(xcoords[i]), starty: Math.round(ycoords[i]), endx: Math.round(xcoords[i+1]), endy: Math.round(ycoords[i+1])});
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for (i = 0; i < l; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if (i < l-1)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[i].ctrlx2 = Math.round(2*xcoords[i+1] - xvals[i+1]);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[i].ctrly2 = Math.round(2*ycoords[i+1] - yvals[i+1]);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[i].ctrlx2 = Math.round((xcoords[l] + xvals[l-1])/2);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp outpoints[i].ctrly2 = Math.round((ycoords[l] + yvals[l-1])/2);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for (; i < l; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for (i = 1; i < l; ++i)