// ===========================================================================//	Matrix2D.java	1996 Yushin Hozumi All rights reserved.//					Author:Yushin Hozumi// ===========================================================================package	StudioRAIN.geometry;import	StudioRAIN.geometry.*;public class Matrix2D{	private Vector2D mXBase = null;	private Vector2D mYBase = null;	public Matrix2D()	{		mXBase = new Vector2D( 1.0F, 0.0F );		mYBase = new Vector2D( 0.0F, 1.0F );	}	public Matrix2D( Vector2D inXBase, Vector2D inYBase )	{		mXBase = new Vector2D( inXBase );		mYBase = new Vector2D( inYBase );	}	public Matrix2D( float in00, float in01, float in10, float in11 )	{		mXBase = new Vector2D( in00, in10 );		mYBase = new Vector2D( in01, in11 );	}	public Matrix2D( float inRadian )	{		float theSin = ( float )Math.sin( ( double )inRadian );		float theCos = ( float )Math.cos( ( double )inRadian );		mXBase = new Vector2D( theCos, theSin );		mYBase = new Vector2D( -theSin, theCos );	}	// query	public float get00() { return mXBase.getX(); }	public float get01() { return mYBase.getX(); }	public float get10() { return mXBase.getY(); }	public float get11() { return mYBase.getY(); }	public Vector2D getRow0() { return new Vector2D( mXBase.getX(), mYBase.getX() ); }	public Vector2D getRow1() { return new Vector2D( mXBase.getY(), mYBase.getY() ); }	public Vector2D getColumn0() { return new Vector2D( mXBase ); }	public Vector2D getColumn1() { return new Vector2D( mYBase ); }		public Matrix2D add( Matrix2D inMatrix )	{		mXBase.add( inMatrix.mXBase );		mYBase.add( inMatrix.mYBase );		return this;	}	public Matrix2D sub( Matrix2D inMatrix )	{		mXBase.sub( inMatrix.mXBase );		mYBase.sub( inMatrix.mYBase );		return this;	}	public Matrix2D product( Matrix2D inMatrix )	{		Vector2D theXBase = new Vector2D( getRow0().innerProduct( inMatrix.getColumn0() ), getRow1().innerProduct( inMatrix.getColumn0() ) ); 		Vector2D theYBase = new Vector2D( getRow0().innerProduct( inMatrix.getColumn1() ), getRow1().innerProduct( inMatrix.getColumn1() ) ); 		mXBase = theXBase;		mYBase = theYBase;		return this;	}	public Vector2D linearTransform( Vector2D inVector )	{		return new Vector2D( getRow0().innerProduct( inVector ), getRow1().innerProduct( inVector ) );	}	public float determinant()	{		return mXBase.outerProduct( mYBase );	}	public Matrix2D inverse()	{		float theDeterminant = determinant();				return new Matrix2D( mYBase.getY() / theDeterminant, -mYBase.getX() /  theDeterminant, -mXBase.getY() / theDeterminant, mXBase.getX() / theDeterminant );	}}