Source: http://morpheo.inrialpes.fr/people/Boyer/Teaching/M2PGI/c3.pdf