code: public Matrix3x2f rotateTo(Vector2fc fromDir, Vector2fc toDir, Matrix3x2f dest) {
          float dot = fromDir.x() * toDir.x() + fromDir.y() * toDir.y();
          float det = fromDir.x() * toDir.y() - fromDir.y() * toDir.x();
          float rm00 = dot;
          float rm01 = det;
          float rm10 = -det;
          float rm11 = dot;
          float nm00 = m00 * rm00 + m10 * rm01;
          float nm01 = m01 * rm00 + m11 * rm01;
          dest.m10 = m00 * rm10 + m10 * rm11;
          dest.m11 = m01 * rm10 + m11 * rm11;
          dest.m00 = nm00;
          dest.m01 = nm01;
          dest.m20 = m20;
          dest.m21 = m21;
          return dest;
      }
docs: Apply a rotation transformation to this matrix that rotates the given normalized <code>fromDir</code> direction vector
  to point along the normalized <code>toDir</code>, and store the result in <code>dest</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!
  
  @param fromDir
  the normalized direction which should be rotate to point along <code>toDir</code>
  @param toDir
  the normalized destination direction
  @param dest
  will hold the result
  @return dest