se puede hacer con canvas HTML5, pero éste es para manipular imágenes como tal y no conozco el alcance de sus funciones gráficas, por lo que me temería que tendrías que hacer una función
Afin.
pero también tienes SVG y hacer lineas, curvas y polígonos en él es relativamente sencillo