Algebraic curve plotter
Haskell, 283 275 bytes

The function g should be called with the matrix and the two ranges as arguments. The matrix is just a list of lists, the ranges each a two element list.

import Data.List
t=transpose
u=tail
z=zipWith
l%x=sum$z(*)l$iterate(*x)1                                   --generate powers and multiply with coefficients
e m y x=[l%x|l&lt;-m]%y                                         --evaluate the encoded polynomial
a#b=[a,a+(b-a)/102..b]                                       --create a range
g m[u,w][i,j]=unlines$v[map((0&lt;).e m y)$u#w|y&lt;-i#j]          --evaluate the function on the grid, get the sign
f g=u[u$u$map fst$scanl(\(r,l)c-&gt;(c==l,c))(1&lt;0,1&lt;0) l|l&lt;-g]  --find +- or -+ transitions within lines
a&amp;b|a&amp;&amp;b=' '|0&lt;1='#'                                         --helper function for creating the string
v g=z(z(&amp;))(f g)(t$f$t g)                                    --create the string


Here the outputs for the more interesting cases: Note that I had to downsize the resultion from 100x100 to about 40x40 such that it sill fits in the console (just change the hardcoded 102 to a smaller number). Also note that the y-axis is pointing downwards.