CurveUtil.js revision e393eced613f9b4a5fb6bdd461d0e0bf5064d5ec
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Utility class used for calculating curve points.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @return {Object}
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Creates an array of start, end and control points for splines.
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)