Source: http://users.polytech.unice.fr/~hugues/GL/chapitre2.pdf