//define([],function () { var WindField = function (obj) { this.west = null; this.east = null; this.south = null; this.north = null; this.rows = null; this.cols = null; this.dx = null; this.dy = null; this.unit = null; this.date = null; this.grid = null; this._init(obj); }; WindField.prototype = { constructor: WindField, _init: function (obj) { var header = obj.header, uComponent = obj['uComponent'], vComponent = obj['vComponent']; this.west = +header['lo1']; this.east = +header['lo2']; this.south = +header['la2']; this.north = +header['la1']; this.rows = +header['ny']; this.cols = +header['nx']; this.dx = +header['dx']; this.dy = +header['dy']; this.unit = header['parameterUnit']; this.date = header['refTime']; this.grid = []; var k = 0, rows = null, uv = null; for (var j = 0; j < this.rows; j++) { rows = []; for (var i = 0; i < this.cols; i++, k++) { uv = this._calcUV(uComponent[k], vComponent[k]); rows.push(uv); } this.grid.push(rows); } }, _calcUV: function (u, v) { return [+u, +v, Math.sqrt(u * u + v * v)]; }, _bilinearInterpolation: function (x, y, g00, g10, g01, g11) { var rx = (1 - x); var ry = (1 - y); var a = rx * ry, b = x * ry, c = rx * y, d = x * y; var u = g00[0] * a + g10[0] * b + g01[0] * c + g11[0] * d; var v = g00[1] * a + g10[1] * b + g01[1] * c + g11[1] * d; return this._calcUV(u, v); }, getIn: function (x, y) { var x0 = Math.floor(x), y0 = Math.floor(y), x1, y1; if (x0 === x && y0 === y) return this.grid[y][x]; x1 = x0 + 1; y1 = y0 + 1; var g00 = this.getIn(x0, y0), g10 = this.getIn(x1, y0), g01 = this.getIn(x0, y1), g11 = this.getIn(x1, y1); return this._bilinearInterpolation(x - x0, y - y0, g00, g10, g01, g11); }, isInBound: function (x, y) { if ((x >= 0 && x < this.cols - 2) && (y >= 0 && y < this.rows - 2)) return true; return false; } }; // return WindField; //}) export default WindField