code: public Matrix3x2d view(double left, double right, double bottom, double top, Matrix3x2d dest) {
          double rm00 = 2.0 / (right - left);
          double rm11 = 2.0 / (top - bottom);
          double rm20 = (left + right) / (left - right);
          double rm21 = (bottom + top) / (bottom - top);
          dest.m20 = m00 * rm20 + m10 * rm21 + m20;
          dest.m21 = m01 * rm20 + m11 * rm21 + m21;
          dest.m00 = m00 * rm00;
          dest.m01 = m01 * rm00;
          dest.m10 = m10 * rm11;
          dest.m11 = m11 * rm11;
          return dest;
      }
docs: Apply a "view" transformation to this matrix that maps the given <code>(left, bottom)</code> and
  <code>(right, top)</code> corners to <code>(-1, -1)</code> and <code>(1, 1)</code> respectively and store the result in <code>dest</code>.
  <p>
  If <code>M</code> is <code>this</code> matrix and <code>O</code> the orthographic projection matrix,
  then the new matrix will be <code>M * O</code>. So when transforming a
  vector <code>v</code> with the new matrix by using <code>M * O * v</code>, the
  orthographic projection transformation will be applied first!
  
  @see #setView(double, double, double, double)
  
  @param left
  the distance from the center to the left view edge
  @param right
  the distance from the center to the right view edge
  @param bottom
  the distance from the center to the bottom view edge
  @param top
  the distance from the center to the top view edge
  @param dest
  will hold the result
  @return dest