URI:
       trarc.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       trarc.c (954B)
       ---
            1 #include "mplot.h"
            2 /*                arc plotting routine                */
            3 /*                from x1,y1 to x2,y2                */
            4 /*        with center xc,yc and radius rr        */
            5 /*        integrates difference equation                */
            6 /*        negative rr draws counterclockwise        */
            7 #define PI4 0.7854
            8 void rarc(double x1, double y1, double x2, double y2, double xc, double yc, double rr){
            9         register double dx, dy, a, b;
           10         double        ph, dph, rd, xnext;
           11         register int        n;
           12         dx = x1 - xc;
           13         dy = y1 - yc;
           14         rd = sqrt(dx * dx + dy * dy);
           15         if (rd / e1->quantum < 1.0) {
           16                 move(xc, yc);
           17                 vec(xc, yc);
           18                 return;
           19         }
           20         dph = acos(1.0 - (e1->quantum / rd));
           21         if (dph > PI4)
           22                 dph = PI4;
           23         ph=atan2((y2-yc),(x2 - xc)) - atan2(dy, dx);
           24         if (ph < 0)
           25                 ph += 6.2832;
           26         if (rr < 0)
           27                 ph = 6.2832 - ph;
           28         if (ph < dph)
           29                 plotline(x1, y1, x2, y2);
           30         else {
           31                 n = ph / dph;
           32                 a = cos(dph);
           33                 b = sin(dph);
           34                 if (rr < 0)
           35                         b = -b;
           36                 move(x1, y1);
           37                 while ((n--) >= 0) {
           38                         xnext = dx * a - dy * b;
           39                         dy = dx * b + dy * a;
           40                         dx = xnext;
           41                         vec(dx + xc, dy + yc);
           42                 }
           43         }
           44 }