src/cm/media/js/lib/yui/yui_3.10.3/build/series-curve-util/series-curve-util-debug.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('series-curve-util', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
 * Provides functionality for drawing curves in a series.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 * @module charts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 * @submodule series-curve-util
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
 * Utility class used for calculating curve points.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
 * @class CurveUtil
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
 * @submodule series-curve-util
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
function CurveUtil()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
CurveUtil.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
     * Creates an array of start, end and control points for splines.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
     * @method getCurveControlPoints
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
     * @param {Array} xcoords Collection of x-coordinates used for calculate the curves
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
     * @param {Array} ycoords Collection of y-coordinates used for calculate the curves
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
     * @return Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    getCurveControlPoints: function(xcoords, ycoords)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
		var outpoints = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
            i = 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
            l = xcoords.length - 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
            xvals = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
            yvals = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
		// Too few points, need at least two
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
		if (l < 1)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
			return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
        outpoints[0] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
            startx: xcoords[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
            starty: ycoords[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
            endx: xcoords[1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
            endy: ycoords[1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
		// Special case, the Bezier should be a straight line
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        if (l === 1)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
			outpoints[0].ctrlx1 = (2.0*xcoords[0] + xcoords[1])/3.0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
			outpoints[0].ctrly2 = (2.0*ycoords[0] + ycoords[1])/3.0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
			outpoints[0].ctrlx2 = 2.0*outpoints[0].ctrlx1 - xcoords[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
            outpoints[0].ctrly2 = 2.0*outpoints[0].ctrly1 - ycoords[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
            return outpoints;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
		for (; i < l; ++i)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
			outpoints.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
                startx: Math.round(xcoords[i]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
                starty: Math.round(ycoords[i]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
                endx: Math.round(xcoords[i+1]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
                endy: Math.round(ycoords[i+1])
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
			xvals[i] = 4.0 * xcoords[i] + 2*xcoords[i+1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
			yvals[i] = 4.0*ycoords[i] + 2*ycoords[i+1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
		xvals[0] = xcoords[0] + (2.0 * xcoords[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
		xvals[l-1] = (8.0 * xcoords[l-1] + xcoords[l]) / 2.0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
		xvals = this.getControlPoints(xvals.concat());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        yvals[0] = ycoords[0] + (2.0 * ycoords[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
		yvals[l-1] = (8.0 * ycoords[l-1] + ycoords[l]) / 2.0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
		yvals = this.getControlPoints(yvals.concat());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        for (i = 0; i < l; ++i)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
			outpoints[i].ctrlx1 = Math.round(xvals[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            outpoints[i].ctrly1 = Math.round(yvals[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
			if (i < l-1)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
				outpoints[i].ctrlx2 = Math.round(2*xcoords[i+1] - xvals[i+1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
                outpoints[i].ctrly2 = Math.round(2*ycoords[i+1] - yvals[i+1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
			}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
			else
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
				outpoints[i].ctrlx2 = Math.round((xcoords[l] + xvals[l-1])/2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
                outpoints[i].ctrly2 = Math.round((ycoords[l] + yvals[l-1])/2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
			}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
		return outpoints;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
	},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
     * Gets the control points for the curve.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
     * @method getControlPoints
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
     * @param {Array} vals Collection of values coords used to generate control points.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
     * @return Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
	getControlPoints: function(vals)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
		var l = vals.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
            x = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            tmp = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
            b = 2.0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            i = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
		x[0] = vals[0] / b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
		for (; i < l; ++i)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
			tmp[i] = 1/b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
			b = (i < l-1 ? 4.0 : 3.5) - tmp[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
			x[i] = (vals[i] - x[i-1]) / b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
		for (i = 1; i < l; ++i)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
			x[l-i-1] -= tmp[l-i] * x[l-i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
		}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
		return x;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
	}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
Y.CurveUtil = CurveUtil;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
}, '3.10.3');