X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fdrawer.c;h=329daa8f2fb5a5778d1e9ae957da5ee9051515e5;hb=f72efb3e0b08321fe70a478bf939c312ed7564ce;hp=f6b77cbc7d79e0f0790e81a9859b0f633b8d1bd6;hpb=5eb17a758cbd979c9fe64e5544859ad411fd4af9;p=swftools.git diff --git a/lib/drawer.c b/lib/drawer.c index f6b77cb..329daa8 100644 --- a/lib/drawer.c +++ b/lib/drawer.c @@ -124,10 +124,11 @@ void draw_string(drawer_t*draw, const char*string) } else if(!strncmp(token, "circle", 6)) { int mx,my,r; - double r2 = 0.70710678118654757*r; + double r2; mx = atof(getToken(&p)); my = atof(getToken(&p)); r = atof(getToken(&p)); + r2 = 0.70710678118654757*r; draw_moveTo2(draw, mx, my-r); draw_conicTo2(draw, mx+r2, my-r2, mx+r, my); draw_conicTo2(draw, mx+r2, my+r2, mx, my+r); @@ -297,12 +298,18 @@ static int approximate3(const struct cspline*s, struct qspline*q, int size, doub /* convert control point representation to d*x^3 + c*x^2 + b*x + a */ - - /* FIXME: we need to do this for the subspline between [start,end], - not [0,1] */ dx= s->end.x - s->control2.x*3 + s->control1.x*3 - s->start.x; dy= s->end.y - s->control2.y*3 + s->control1.y*3 - s->start.y; + /* we need to do this for the subspline between [start,end], not [0,1] + as a transformation of t->a*t+b does nothing to highest coefficient + of the spline except multiply it with a^3, we just need to modify + d here. */ + {double m = end-start; + dx*=m*m*m; + dy*=m*m*m; + } + /* use the integral over (f(x)-g(x))^2 between 0 and 1 to measure the approximation quality. (it boils down to const*d^2) @@ -330,8 +337,8 @@ void draw_cubicTo(drawer_t*draw, FPOINT* control1, FPOINT* control2, FPOINT* t { struct qspline q[128]; struct cspline c; - double quality = 80; - double maxerror = (500-(quality*5)>1?500-(quality*5):1)/20.0; + //double quality = 80; + double maxerror = 1;//(500-(quality*5)>1?500-(quality*5):1)/20.0; int t,num; c.start.x = draw->pos.x;