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

📄 matrix3d.as

📁 一个2D基于verlet的Flash物理引擎。它用AS3编写而成。Fisix的目标是应用到游戏等计算量很大的实时应用中。尽管flash比c/c++要慢,很棒的物理引擎
💻 AS
📖 第 1 页 / 共 2 页
字号:
/* *  PAPER    ON   ERVIS  NPAPER ISION  PE  IS ON  PERVI IO  APER  SI  PA *  AP  VI  ONPA  RV  IO PA     SI  PA ER  SI NP PE     ON AP  VI ION AP *  PERVI  ON  PE VISIO  APER   IONPA  RV  IO PA  RVIS  NP PE  IS ONPAPE *  ER     NPAPER IS     PE     ON  PE  ISIO  AP     IO PA ER  SI NP PER *  RV     PA  RV SI     ERVISI NP  ER   IO   PE VISIO  AP  VISI  PA  RV3D *  ______________________________________________________________________ *  papervision3d.org + blog.papervision3d.org + osflash.org/papervision3d *//* * Copyright 2006 (c) Carlos Ulloa Matesanz, noventaynueve.com. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */// ______________________________________________________________________ Matrix3Dpackage org.papervision3d.core.math{/*** The Matrix3D class lets you create and manipulate 4x3 3D transformation matrices.*//* Acknowledgements and references: > Industrial Light & Magic, a division of Lucas Digital Ltd. LLC > DAVID H. EBERLY3D: Game Engine Design > TOMAS AKENINE-MöLLER AND ERIC HAINES: Real-Time Rendering > THOMAS PFEIFFER: Sandy3D - www.flashsandy.org > The Matrix and Quaternion FAQ - http://www.j3d.org/matrix_faq/matrfaq_latest.html*/public class Matrix3D{	/**	 * X O O O	 * O O O O	 * O O O O	*/	public var n11 :Number;	/**	 * O X O O	 * O O O O	 * O O O O	*/	public var n12 :Number;	/**	 * O O X O	 * O O O O	 * O O O O	*/	public var n13 :Number;	/**	 * O O O X	 * O O O O	 * O O O O	*/	public var n14 :Number;	/**	 * O O O O	 * X O O O	 * O O O O	*/	public var n21 :Number;	/**	 * O O O O	 * O X O O	 * O O O O	*/	public var n22 :Number;	/**	 * O O O O	 * O O X O	 * O O O O	*/	public var n23 :Number;	/**	 * O O O O	 * O O O X	 * O O O O	*/	public var n24 :Number;	/**	 * O O O O	 * O O O O	 * X O O O	*/	public var n31 :Number;	/**	 * O O O O	 * O O O O	 * O X O O	*/	public var n32 :Number;	/**	 * O O O O	 * O O O O	 * O O X O	*/	public var n33 :Number;	/**	 * O O O O	 * O O O O	 * O O O X	*/	public var n34 :Number;	/**	 * O O O O	 * O O O O	 * O O O O	 * X O O O	*/	public var n41 :Number;	/**	 * O O O O	 * O O O O	 * O O O O	 * O X O O	*/	public var n42 :Number;	/**	 * O O O O	 * O O O O	 * O O O O	 * O O X O	*/	public var n43 :Number;	/**	 * O O O O	 * O O O O	 * O O O O	 * O O O X	*/	public var n44 :Number;		public var sid:String;	public var type:String = "";		// _________________________________________________________________________________ Matrix3D	/**	* The Matrix3D constructor lets you create Matrix3D objects.	*	* @param	args	The values to populate the matrix with. Identity matrix is returned by default.	*/	public function Matrix3D( args:Array=null )	{		if( ! args || args.length < 12 )		{			n11 = n22 = n33 = n44 = 1;			n12 = n13 = n14 = n21 = n23 = n24 = n31 = n32 = n34 = n41 = n42 = n43 = 0;		}		else		{			n11 = args[0];  n12 = args[1];  n13 = args[2];  n14 = args[3];			n21 = args[4];  n22 = args[5];  n23 = args[6];  n24 = args[7];			n31 = args[8];  n32 = args[9];  n33 = args[10]; n34 = args[11];						if( args.length == 16 )			{				n41 = args[12];	 n42 = args[13]; n43 = args[14]; n44 = args[15];			}			}	}	// _________________________________________________________________________________ IDENTITY	public static function get IDENTITY():Matrix3D	{		return new Matrix3D		(			[				1, 0, 0, 0,				0, 1, 0, 0,				0, 0, 1, 0,				0, 0, 0, 1			]		);	}	// _________________________________________________________________________________ trace	public function toString():String	{		var s:String = "";		s += int(n11*1000)/1000 + "\t\t" + int(n12*1000)/1000 + "\t\t" + int(n13*1000)/1000 + "\t\t" + int(n14*1000)/1000 +"\n";		s += int(n21*1000)/1000 + "\t\t" + int(n22*1000)/1000 + "\t\t" + int(n23*1000)/1000 + "\t\t" + int(n24*1000)/1000 + "\n";		s += int(n31*1000)/1000 + "\t\t" + int(n32*1000)/1000 + "\t\t" + int(n33*1000)/1000 + "\t\t" + int(n34*1000)/1000 + "\n";		s += int(n41*1000)/1000 + "\t\t" + int(n42*1000)/1000 + "\t\t" + int(n43*1000)/1000 + "\t\t" + int(n44*1000)/1000 + "\n";		return s;	}	// _________________________________________________________________________________ OPERATIONS	public function calculateMultiply( a:Matrix3D, b:Matrix3D ):void	{		var a11:Number = a.n11; var b11:Number = b.n11;		var a21:Number = a.n21; var b21:Number = b.n21;		var a31:Number = a.n31; var b31:Number = b.n31;		var a12:Number = a.n12; var b12:Number = b.n12;		var a22:Number = a.n22; var b22:Number = b.n22;		var a32:Number = a.n32; var b32:Number = b.n32;		var a13:Number = a.n13; var b13:Number = b.n13;		var a23:Number = a.n23; var b23:Number = b.n23;		var a33:Number = a.n33; var b33:Number = b.n33;		var a14:Number = a.n14; var b14:Number = b.n14;		var a24:Number = a.n24; var b24:Number = b.n24;		var a34:Number = a.n34; var b34:Number = b.n34;		this.n11 = a11 * b11 + a12 * b21 + a13 * b31;		this.n12 = a11 * b12 + a12 * b22 + a13 * b32;		this.n13 = a11 * b13 + a12 * b23 + a13 * b33;		this.n14 = a11 * b14 + a12 * b24 + a13 * b34 + a14;		this.n21 = a21 * b11 + a22 * b21 + a23 * b31;		this.n22 = a21 * b12 + a22 * b22 + a23 * b32;		this.n23 = a21 * b13 + a22 * b23 + a23 * b33;		this.n24 = a21 * b14 + a22 * b24 + a23 * b34 + a24;		this.n31 = a31 * b11 + a32 * b21 + a33 * b31;		this.n32 = a31 * b12 + a32 * b22 + a33 * b32;		this.n33 = a31 * b13 + a32 * b23 + a33 * b33;		this.n34 = a31 * b14 + a32 * b24 + a33 * b34 + a34;	}	public static function multiply( a:Matrix3D, b:Matrix3D ):Matrix3D	{		var m:Matrix3D = new Matrix3D();				m.calculateMultiply( a, b );				return m;	}	public function calculateMultiply3x3( a:Matrix3D, b:Matrix3D ):void	{		var a11:Number = a.n11; var b11:Number = b.n11;		var a21:Number = a.n21; var b21:Number = b.n21;		var a31:Number = a.n31; var b31:Number = b.n31;		var a12:Number = a.n12; var b12:Number = b.n12;		var a22:Number = a.n22; var b22:Number = b.n22;		var a32:Number = a.n32; var b32:Number = b.n32;		var a13:Number = a.n13; var b13:Number = b.n13;		var a23:Number = a.n23; var b23:Number = b.n23;		var a33:Number = a.n33; var b33:Number = b.n33;		this.n11 = a11 * b11 + a12 * b21 + a13 * b31;		this.n12 = a11 * b12 + a12 * b22 + a13 * b32;		this.n13 = a11 * b13 + a12 * b23 + a13 * b33;		this.n21 = a21 * b11 + a22 * b21 + a23 * b31;		this.n22 = a21 * b12 + a22 * b22 + a23 * b32;		this.n23 = a21 * b13 + a22 * b23 + a23 * b33;		this.n31 = a31 * b11 + a32 * b21 + a33 * b31;		this.n32 = a31 * b12 + a32 * b22 + a33 * b32;		this.n33 = a31 * b13 + a32 * b23 + a33 * b33;	}	public function calculateMultiply4x4( a:Matrix3D, b:Matrix3D ):void	{		var a11:Number = a.n11; var b11:Number = b.n11;		var a21:Number = a.n21; var b21:Number = b.n21;		var a31:Number = a.n31; var b31:Number = b.n31;		var a41:Number = a.n41; var b41:Number = b.n41;				var a12:Number = a.n12; var b12:Number = b.n12;		var a22:Number = a.n22; var b22:Number = b.n22;		var a32:Number = a.n32; var b32:Number = b.n32;		var a42:Number = a.n42; var b42:Number = b.n42;				var a13:Number = a.n13; var b13:Number = b.n13;		var a23:Number = a.n23; var b23:Number = b.n23;		var a33:Number = a.n33; var b33:Number = b.n33;		var a43:Number = a.n43; var b43:Number = b.n43;				var a14:Number = a.n14; var b14:Number = b.n14;		var a24:Number = a.n24; var b24:Number = b.n24;		var a34:Number = a.n34; var b34:Number = b.n34;		var a44:Number = a.n44; var b44:Number = b.n44;		this.n11 = a11 * b11 + a12 * b21 + a13 * b31;		this.n12 = a11 * b12 + a12 * b22 + a13 * b32;		this.n13 = a11 * b13 + a12 * b23 + a13 * b33;		this.n14 = a11 * b14 + a12 * b24 + a13 * b34 + a14;		this.n21 = a21 * b11 + a22 * b21 + a23 * b31;		this.n22 = a21 * b12 + a22 * b22 + a23 * b32;		this.n23 = a21 * b13 + a22 * b23 + a23 * b33;		this.n24 = a21 * b14 + a22 * b24 + a23 * b34 + a24;		this.n31 = a31 * b11 + a32 * b21 + a33 * b31;		this.n32 = a31 * b12 + a32 * b22 + a33 * b32;		this.n33 = a31 * b13 + a32 * b23 + a33 * b33;		this.n34 = a31 * b14 + a32 * b24 + a33 * b34 + a34;				this.n41 = a41 * b11 + a42 * b21 + a43 * b31;		this.n42 = a41 * b12 + a42 * b22 + a43 * b32;		this.n43 = a41 * b13 + a42 * b23 + a43 * b33;		this.n44 = a41 * b14 + a42 * b24 + a43 * b34 + a44;	}		public static function multiply3x3( a:Matrix3D, b:Matrix3D ):Matrix3D	{		var m:Matrix3D = new Matrix3D();				m.calculateMultiply3x3( a, b );				return m;	}	public function calculateAdd( a:Matrix3D, b:Matrix3D ):void	{		this.n11 = a.n11 + b.n11;		this.n12 = a.n12 + b.n12;		this.n13 = a.n13 + b.n13;		this.n14 = a.n14 + b.n14;		this.n21 = a.n21 + b.n21;		this.n22 = a.n22 + b.n22;		this.n23 = a.n23 + b.n23;		this.n24 = a.n24 + b.n24;		this.n31 = a.n31 + b.n31;		this.n32 = a.n32 + b.n32;		this.n33 = a.n33 + b.n33;		this.n34 = a.n34 + b.n34;	}	public static function add( a:Matrix3D, b:Matrix3D ):Matrix3D	{		var m:Matrix3D = new Matrix3D();				m.calculateAdd( a, b );				return m;	}	public function calculateInverse( m:Matrix3D ):void	{		var d:Number = m.det;		if( Math.abs(d) > 0.001 )		{			d = 1/d;				var m11:Number = m.n11; var m21:Number = m.n21; var m31:Number = m.n31;			var m12:Number = m.n12; var m22:Number = m.n22; var m32:Number = m.n32;			var m13:Number = m.n13; var m23:Number = m.n23; var m33:Number = m.n33;			var m14:Number = m.n14; var m24:Number = m.n24; var m34:Number = m.n34;				this.n11 =	 d * ( m22 * m33 - m32 * m23 );			this.n12 =	-d * ( m12 * m33 - m32 * m13 );			this.n13 =	 d * ( m12 * m23 - m22 * m13 );			this.n14 =	-d * ( m12 * (m23*m34 - m33*m24) - m22 * (m13*m34 - m33*m14) + m32 * (m13*m24 - m23*m14) );				this.n21 =	-d * ( m21 * m33 - m31 * m23 );			this.n22 =	 d * ( m11 * m33 - m31 * m13 );			this.n23 =	-d* ( m11 * m23 - m21 * m13 );			this.n24 =	 d * ( m11 * (m23*m34 - m33*m24) - m21 * (m13*m34 - m33*m14) + m31 * (m13*m24 - m23*m14) );				this.n31 =	 d * ( m21 * m32 - m31 * m22 );			this.n32 =	-d* ( m11 * m32 - m31 * m12 );			this.n33 =	 d * ( m11 * m22 - m21 * m12 );			this.n34 =	-d* ( m11 * (m22*m34 - m32*m24) - m21 * (m12*m34 - m32*m14) + m31 * (m12*m24 - m22*m14) );		}	}	public static function inverse( m:Matrix3D ):Matrix3D	{		var inv:Matrix3D = new Matrix3D();				inv.calculateInverse( m );				return inv;	}	public function get det():Number	{		return	(this.n11 * this.n22 - this.n21 * this.n12) * this.n33 - (this.n11 * this.n32 - this.n31 * this.n12) * this.n23 +				(this.n21 * this.n32 - this.n31 * this.n22) * this.n13;	}	public function get trace():Number	{		return this.n11 + this.n22 + this.n33 + 1;	}	// _________________________________________________________________________________ COPY	public function copy( m:Matrix3D ):Matrix3D

⌨️ 快捷键说明

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