code: public Matrix3x2f rotateAbout(float ang, float x, float y, Matrix3x2f dest) {
          float tm20 = m00 * x + m10 * y + m20;
          float tm21 = m01 * x + m11 * y + m21;
          float cos = (float) Math.cos(ang);
          float sin = (float) Math.sin(ang);
          float nm00 = m00 * cos + m10 * sin;
          float nm01 = m01 * cos + m11 * sin;
          dest.m10 = m00 * -sin + m10 * cos;
          dest.m11 = m01 * -sin + m11 * cos;
          dest.m00 = nm00;
          dest.m01 = nm01;
          dest.m20 = dest.m00 * -x + dest.m10 * -y + tm20;
          dest.m21 = dest.m01 * -x + dest.m11 * -y + tm21;
          return dest;
      }
docs: Apply a rotation transformation to this matrix by rotating the given amount of radians about
  the specified rotation center <code>(x, y)</code> and store the result in <code>dest</code>.
  <p>
  This method is equivalent to calling: <code>translate(x, y, dest).rotate(ang).translate(-x, -y)</code>
  <p>
  If <code>M</code> is <code>this</code> matrix and <code>R</code> the rotation matrix,
  then the new matrix will be <code>M * R</code>. So when transforming a
  vector <code>v</code> with the new matrix by using <code>M * R * v</code>, the rotation will be applied first!
  
  @see #translate(float, float, Matrix3x2f)
  @see #rotate(float, Matrix3x2f)
  
  @param ang
  the angle in radians
  @param x
  the x component of the rotation center
  @param y
  the y component of the rotation center
  @param dest
  will hold the result
  @return dest