Source: https://www.cs.utep.edu/vladik/2012/tr12-15.pdf