/// <summary> /// create a rotation matrix from a fwd and side /// 2D vector /// </summary> /// <param name="fwd"></param> /// <param name="side"></param> public void Rotate(Vector2D fwd , Vector2D side) { Matrix3x3Data _data = new Matrix3x3Data( fwd.x,fwd.y,0, side.x,side.y,0, 0,0,1); MatrixMultiply(_data); }
/// <summary> /// 构造旋转矩阵,注意: /// 此矩阵类为行向量矩阵 /// </summary> /// <param name="rotation">旋转的角度, /// 有正负之分,在此矩阵中,逆时针旋转的角度为正, /// 顺时针则相反 /// </param> public void Rotate(float rotation) { float sin = (float)Math.Sin(rotation); float cos = (float)Math.Cos(rotation); Matrix3x3Data _data = new Matrix3x3Data( cos,sin,0, -sin,cos,0, 0,0,1); MatrixMultiply(_data); }
/// <summary> /// 构造缩放矩阵 /// </summary> /// <param name="xScale"></param> /// <param name="yScale"></param> public void Scale(float xScale , float yScale) { Matrix3x3Data _data =new Matrix3x3Data( xScale, 0, 0, 0, yScale, 0, 0, 0, 1); MatrixMultiply(_data); }
public void Identity() { this.m_Data = new Matrix3x3Data(1,0,0,0,1,0,0,0,1); }
private void MatrixMultiply(Matrix3x3Data mIn) { Matrix3x3Data data = new Matrix3x3Data(); data._11 = this.m_Data._11 * mIn._11 + this.m_Data._12 * mIn._21 + this.m_Data._13 * mIn._31; data._12 = this.m_Data._11 * mIn._12 + this.m_Data._12 * mIn._22 + this.m_Data._13 * mIn._32; data._13 = this.m_Data._11 * mIn._13 + this.m_Data._12 * mIn._23 + this.m_Data._13 * mIn._33; data._21 = this.m_Data._21 * mIn._11 + this.m_Data._22 * mIn._21 + this.m_Data._23 * mIn._31; data._22 = this.m_Data._21 * mIn._12 + this.m_Data._22 * mIn._22 + this.m_Data._23 * mIn._32; data._23 = this.m_Data._21 * mIn._13 + this.m_Data._22 * mIn._23 + this.m_Data._23 * mIn._33; data._31 = this.m_Data._31 * mIn._11 + this.m_Data._32 * mIn._21 + this.m_Data._33 * mIn._31; data._32 = this.m_Data._31 * mIn._12 + this.m_Data._32 * mIn._22 + this.m_Data._33 * mIn._32; data._33 = this.m_Data._31 * mIn._13 + this.m_Data._32 * mIn._23 + this.m_Data._33 * mIn._33; this.m_Data = data; }
public void Translate(float x , float y) { Matrix3x3Data mat = new Matrix3x3Data(1,0,0,0,1,0,x,y,1); MatrixMultiply(mat); }