⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.js

📁 OA系统实现以下功能: a、个人办公,我的办公桌 b、公文管理 c、工作流程 d、组织管理 e. 权限管理
💻 JS
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.gfx.matrix");dojo.require("dojo.lang.common");dojo.require("dojo.math.*");dojo.gfx.matrix.Matrix2D = function (arg) {	if (arg) {		if (arg instanceof Array) {			if (arg.length > 0) {				var m = dojo.gfx.matrix.normalize(arg[0]);				for (var i = 1; i < arg.length; ++i) {					var l = m;					var r = dojo.gfx.matrix.normalize(arg[i]);					m = new dojo.gfx.matrix.Matrix2D();					m.xx = l.xx * r.xx + l.xy * r.yx;					m.xy = l.xx * r.xy + l.xy * r.yy;					m.yx = l.yx * r.xx + l.yy * r.yx;					m.yy = l.yx * r.xy + l.yy * r.yy;					m.dx = l.xx * r.dx + l.xy * r.dy + l.dx;					m.dy = l.yx * r.dx + l.yy * r.dy + l.dy;				}				dojo.mixin(this, m);			}		} else {			dojo.mixin(this, arg);		}	}};dojo.extend(dojo.gfx.matrix.Matrix2D, {xx:1, xy:0, yx:0, yy:1, dx:0, dy:0});dojo.mixin(dojo.gfx.matrix, {identity:new dojo.gfx.matrix.Matrix2D(), flipX:new dojo.gfx.matrix.Matrix2D({xx:-1}), flipY:new dojo.gfx.matrix.Matrix2D({yy:-1}), flipXY:new dojo.gfx.matrix.Matrix2D({xx:-1, yy:-1}), translate:function (a, b) {	if (arguments.length > 1) {		return new dojo.gfx.matrix.Matrix2D({dx:a, dy:b});	}	return new dojo.gfx.matrix.Matrix2D({dx:a.x, dy:a.y});}, scale:function (a, b) {	if (arguments.length > 1) {		return new dojo.gfx.matrix.Matrix2D({xx:a, yy:b});	}	if (typeof a == "number") {		return new dojo.gfx.matrix.Matrix2D({xx:a, yy:a});	}	return new dojo.gfx.matrix.Matrix2D({xx:a.x, yy:a.y});}, rotate:function (angle) {	var c = Math.cos(angle);	var s = Math.sin(angle);	return new dojo.gfx.matrix.Matrix2D({xx:c, xy:s, yx:-s, yy:c});}, rotateg:function (degree) {	return dojo.gfx.matrix.rotate(dojo.math.degToRad(degree));}, skewX:function (angle) {	return new dojo.gfx.matrix.Matrix2D({xy:Math.tan(angle)});}, skewXg:function (degree) {	return dojo.gfx.matrix.skewX(dojo.math.degToRad(degree));}, skewY:function (angle) {	return new dojo.gfx.matrix.Matrix2D({yx:-Math.tan(angle)});}, skewYg:function (degree) {	return dojo.gfx.matrix.skewY(dojo.math.degToRad(degree));}, normalize:function (matrix) {	return (matrix instanceof dojo.gfx.matrix.Matrix2D) ? matrix : new dojo.gfx.matrix.Matrix2D(matrix);}, clone:function (matrix) {	var obj = new dojo.gfx.matrix.Matrix2D();	for (var i in matrix) {		if (typeof (matrix[i]) == "number" && typeof (obj[i]) == "number" && obj[i] != matrix[i]) {			obj[i] = matrix[i];		}	}	return obj;}, invert:function (matrix) {	var m = dojo.gfx.matrix.normalize(matrix);	var D = m.xx * m.yy - m.xy * m.yx;	var M = new dojo.gfx.matrix.Matrix2D({xx:m.yy / D, xy:-m.xy / D, yx:-m.yx / D, yy:m.xx / D, dx:(m.yx * m.dy - m.yy * m.dx) / D, dy:(m.xy * m.dx - m.xx * m.dy) / D});	return M;}, _multiplyPoint:function (m, x, y) {	return {x:m.xx * x + m.xy * y + m.dx, y:m.yx * x + m.yy * y + m.dy};}, multiplyPoint:function (matrix, a, b) {	var m = dojo.gfx.matrix.normalize(matrix);	if (typeof a == "number" && typeof b == "number") {		return dojo.gfx.matrix._multiplyPoint(m, a, b);	}	return dojo.gfx.matrix._multiplyPoint(m, a.x, a.y);}, multiply:function (matrix) {	var m = dojo.gfx.matrix.normalize(matrix);	for (var i = 1; i < arguments.length; ++i) {		var l = m;		var r = dojo.gfx.matrix.normalize(arguments[i]);		m = new dojo.gfx.matrix.Matrix2D();		m.xx = l.xx * r.xx + l.xy * r.yx;		m.xy = l.xx * r.xy + l.xy * r.yy;		m.yx = l.yx * r.xx + l.yy * r.yx;		m.yy = l.yx * r.xy + l.yy * r.yy;		m.dx = l.xx * r.dx + l.xy * r.dy + l.dx;		m.dy = l.yx * r.dx + l.yy * r.dy + l.dy;	}	return m;}, _sandwich:function (m, x, y) {	return dojo.gfx.matrix.multiply(dojo.gfx.matrix.translate(x, y), m, dojo.gfx.matrix.translate(-x, -y));}, scaleAt:function (a, b, c, d) {	switch (arguments.length) {	  case 4:		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c, d);	  case 3:		if (typeof c == "number") {			return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b, c);		}		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a, b), c.x, c.y);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a), b.x, b.y);}, rotateAt:function (angle, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(angle), a.x, a.y);}, rotategAt:function (degree, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(degree), a.x, a.y);}, skewXAt:function (angle, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(angle), a.x, a.y);}, skewXgAt:function (degree, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(degree), a.x, a.y);}, skewYAt:function (angle, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(angle), a.x, a.y);}, skewYgAt:function (degree, a, b) {	if (arguments.length > 2) {		return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a, b);	}	return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(degree), a.x, a.y);}});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -