virtual void draw(cairo_t *cr, std::ostringstream *notify, int width, int height, bool save) { cairo_set_source_rgba (cr, 0., 0., 0., 1); cairo_set_line_width (cr, 1); Piecewise<SBasis> pws; //pws = Geom::cos(Linear(0,100)) + 3; pws = Geom::sqrt(Linear(0,100)); //pws = log(Interval(1,8)); //Piecewise<SBasis> l(Linear(-100,100)); //Piecewise<SBasis> one(Linear(1,1)); //pws = Geom::reciprocal(l*l + one)*l + l; //pws = xlogx(Interval(0.5,3)); //pws = Geom::reciprocal(pws); //pws = -integral(Geom::reciprocal(Linear(1,2)))*Piecewise<SBasis>(Linear(1,2)); pws = -pws*width/4 + width/2; pws.scaleDomain(width/2); pws.offsetDomain(width/4); cairo_pw(cr, pws); cairo_stroke(cr); cairo_set_source_rgba (cr, 0., 0., .5, 1.); cairo_horiz(cr, 500, pws.cuts); cairo_stroke(cr); *notify << "total pieces: " << pws.size(); Toy::draw(cr, notify, width, height, save); }
void draw(cairo_t *cr, std::ostringstream *notify, int width, int height, bool save) { Geom::Point dir(1,-2); D2<Piecewise<SBasis> > B = make_cuts_independent(path_a_pw); cairo_set_source_rgba (cr, 0., 0.125, 0, 1); if(0) { D2<Piecewise<SBasis> > tB(cos(B[0]*0.1)*(brush_handle.pos[0]/100) + B[0], cos(B[1]*0.1)*(brush_handle.pos[1]/100) + B[1]); cairo_d2_pw_sb(cr, tB); } else { Piecewise<SBasis> r2 = (dot(path_a_pw - brush_handle.pos, path_a_pw - brush_handle.pos)); Piecewise<SBasis> rc; rc.push_cut(0); rc.push(SBasis(Linear(1, 1)), 2); rc.push(SBasis(Linear(1, 0)), 4); rc.push(SBasis(Linear(0, 0)), 30); rc *= 10; rc.scaleDomain(1000); Piecewise<SBasis> swr; swr.push_cut(0); swr.push(SBasis(Linear(0, 1)), 2); swr.push(SBasis(Linear(1, 0)), 4); swr.push(SBasis(Linear(0, 0)), 30); swr *= 10; swr.scaleDomain(1000); cairo_pw(cr, swr);// + (height - 100)); D2<Piecewise<SBasis> > uB = make_cuts_independent(unitVector(path_a_pw - brush_handle.pos)); D2<Piecewise<SBasis> > tB(compose(rc, (r2))*uB[0] + B[0], compose(rc, (r2))*uB[1] + B[1]); cairo_d2_pw_sb(cr, tB); //path_a_pw = sectionize(tB); } cairo_stroke(cr); *notify << path_a_pw.size(); Toy::draw(cr, notify, width, height, save); }