/// <summary> /// 逆行列を取得する。 /// </summary> /// <returns></returns> public Matrix44F GetInverted() { Matrix44F o = this; o.SetInverted(); return(o); }
public static Matrix44F operator *(Matrix44F left, Matrix44F right) { Matrix44F o_ = new Matrix44F(); Mul(ref o_, ref left, ref right); return(o_); }
/// <summary> /// Transformを計算します。 /// </summary> /// <param name="position">座標</param> /// <param name="centerPosition">中心座標</param> /// <param name="angle">角度(弧度法)</param> /// <param name="scale">拡大率</param> /// <returns></returns> internal static Matrix44F CalcTransform(Vector2F position, Vector2F centerPosition, float angle, Vector2F scale) { var matPosition = Matrix44F.GetTranslation2D(position); var matCenterPosition = Matrix44F.GetTranslation2D(-centerPosition); var matRotate = Matrix44F.GetRotationZ(angle); var matScale = Matrix44F.GetScale2D(scale); return(matPosition * matScale * matRotate * matCenterPosition); // NOTE: 一気に計算したほうがよさそう }
/// <summary> /// 乗算を行う。 /// </summary> /// <param name="o">出力先</param> /// <param name="in1">行列1</param> /// <param name="in2">行列2</param> public static void Mul(ref Matrix44F o, ref Matrix44F in1, ref Matrix44F in2) { Matrix44F _in1 = in1; Matrix44F _in2 = in2; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { float v = 0.0f; for (int k = 0; k < 4; k++) { v += _in1.Values[i, k] * _in2.Values[k, j]; } o.Values[i, j] = v; } } }