2010-09-02 23:23:53 +08:00
|
|
|
/*
|
2011-12-09 22:35:15 +08:00
|
|
|
* L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
|
2010-09-02 23:23:53 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
L.Transformation = L.Class.extend({
|
|
|
|
initialize: function(/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {
|
|
|
|
this._a = a;
|
|
|
|
this._b = b;
|
|
|
|
this._c = c;
|
|
|
|
this._d = d;
|
|
|
|
},
|
|
|
|
|
2011-02-28 04:31:46 +08:00
|
|
|
transform: function(point, scale) {
|
|
|
|
return this._transform(point.clone(), scale);
|
|
|
|
},
|
2011-12-09 22:35:15 +08:00
|
|
|
|
2011-02-28 04:31:46 +08:00
|
|
|
// destructive transform (faster)
|
2011-12-09 22:35:15 +08:00
|
|
|
_transform: function(/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
|
2010-09-02 23:23:53 +08:00
|
|
|
scale = scale || 1;
|
2011-12-09 22:35:15 +08:00
|
|
|
point.x = scale * (this._a * point.x + this._b);
|
2011-02-28 04:31:46 +08:00
|
|
|
point.y = scale * (this._c * point.y + this._d);
|
|
|
|
return point;
|
2010-09-02 23:23:53 +08:00
|
|
|
},
|
2011-12-09 22:35:15 +08:00
|
|
|
|
2010-09-02 23:23:53 +08:00
|
|
|
untransform: function(/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
|
|
|
|
scale = scale || 1;
|
|
|
|
return new L.Point(
|
2010-09-15 21:45:16 +08:00
|
|
|
(point.x/scale - this._b) / this._a,
|
|
|
|
(point.y/scale - this._d) / this._c);
|
2010-09-02 23:23:53 +08:00
|
|
|
}
|
2011-12-09 22:35:15 +08:00
|
|
|
});
|