Dos cosas:
1) Se obtiene mejores resultados si se hace uso de DoubleBuffered
2) Cuando se está trabajando con números muy chicos o muy grandes es deseable emplear la función
Hypot; que por cierto dicho sea de paso Delphi ya la tiene implementada (al menos desde D6). Parece ser que a muchos se les escapa este detallito.
Lo demás sería pulir un poco el código, que hay partes que se podría mejorar, e incluso algunos cálculos redundantes.
Por lo demás, interesante.
Saludos,