Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "mplot.h"
/*              arc plotting routine            */
/*              from x1,y1 to x2,y2             */
/*      with center xc,yc and radius rr */
/*      integrates difference equation          */
/*      negative rr draws counterclockwise      */
#define PI4 0.7854
void rarc(double x1, double y1, double x2, double y2, double xc, double yc, double rr){
        register double dx, dy, a, b;
        double  ph, dph, rd, xnext;
        register int    n;
        dx = x1 - xc;
        dy = y1 - yc;
        rd = sqrt(dx * dx + dy * dy);
        if (rd / e1->quantum < 1.0) { 
                move(xc, yc); 
                vec(xc, yc); 
                return;
        }
        dph = acos(1.0 - (e1->quantum / rd));
        if (dph > PI4) 
                dph = PI4;
        ph=atan2((y2-yc),(x2 - xc)) - atan2(dy, dx);
        if (ph < 0) 
                ph += 6.2832; 
        if (rr < 0) 
                ph = 6.2832 - ph;
        if (ph < dph) 
                plotline(x1, y1, x2, y2);
        else {
                n = ph / dph; 
                a = cos(dph); 
                b = sin(dph); 
                if (rr < 0) 
                        b = -b;
                move(x1, y1);
                while ((n--) >= 0) {
                        xnext = dx * a - dy * b; 
                        dy = dx * b + dy * a; 
                        dx = xnext;
                        vec(dx + xc, dy + yc);
                }
        }
}