I have been working through some pre-calculus problems, and wxMaxima is a fun tool to play with:
wxMaxima provides a mathematical workbook environment. Maxima is a Computer Algebra System coded in Common Lisp back in the 80s.
In the screenshot you can see the semi-circle function f(x), and the function h(x, x_2) generates the tangent line for any point on the semicircle. The helpful feature exhibited here is partial application, allowing me to specify, e.g., h(x,20), to provide the graph with a new function, the tangent line attached to that point on the semi-circle. With a little more work, I could generalize h to allow passing in any semicircle function.
I wanted to upload the wxmx file, but wordpress.com does not permit upload that file type, for reasons that are beyond me.