Source: https://team.inria.fr/imagine/files/2014/10/sig96-improv.pdf