1: /*
   2:  * Copyright (c) 1985 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)arc.c	5.1 (Berkeley) 9/21/85";
   9: #endif not lint
  10: 
  11: int del = 20;
  12: step(d){
  13:     del = d;
  14: }
  15: arc(x,y,x0,y0,x1,y1){
  16:     double pc;
  17:     double sqrt();
  18:     int flg,m,xc,yc,xs,ys,qs,qf;
  19:     float dx,dy,r;
  20:     char use;
  21:     dx = x-x0;
  22:     dy = y-y0;
  23:     r = dx*dx+dy*dy;
  24:     pc = r;
  25:     pc = sqrt(pc);
  26:     flg = pc/4;
  27:     if(flg == 0)step(1);
  28:     else if(flg < del)step(flg);
  29:     xc = xs = x0;
  30:     yc = ys = y0;
  31:     move(xs,ys);
  32:     if(x0 == x1 && y0 == y1)flg=0;
  33:     else flg=1;
  34:     qs = quad(x,y,x0,y0);
  35:     qf = quad(x,y,x1,y1);
  36:     if(abs(x-x1) < abs(y-y1)){
  37:         use = 'x';
  38:         if(qs == 2 || qs ==3)m = -1;
  39:         else m=1;
  40:     }
  41:     else {
  42:         use = 'y';
  43:         if(qs > 2)m= -1;
  44:         else m= 1;
  45:     }
  46:     while(1){
  47:         switch(use){
  48:         case 'x':
  49:             if(qs == 2 || qs == 3)yc -= del;
  50:             else yc += del;
  51:             dy = yc-y;
  52:             pc = r-dy*dy;
  53:             xc = m*sqrt(pc)+x;
  54:             if((x < xs && x >= xc) || ( x > xs && x <= xc) ||
  55:                 (y < ys && y >= yc) || ( y > ys && y <=  yc) )
  56:             {
  57:                 if(++qs > 4)qs=1;
  58:                 if(qs == 2 || qs == 3)m= -1;
  59:                 else m=1;
  60:                 flg=1;
  61:             }
  62:             cont(xc,yc);
  63:             xs = xc;
  64:             ys = yc;
  65:             if(qs == qf && flg == 1)
  66:                 switch(qf){
  67:                 case 3:
  68:                 case 4:
  69:                     if(xs >= x1)return;
  70:                     continue;
  71:                 case 1:
  72:                 case 2:
  73:                     if(xs <= x1)return;
  74:                 }
  75:             continue;
  76:         case 'y':
  77:             if(qs > 2)xc += del;
  78:             else xc -= del;
  79:             dx = xc-x;
  80:             pc = r-dx*dx;
  81:             yc = m*sqrt(pc)+y;
  82:             if((x < xs && x >= xc) || ( x > xs && x <= xc ) ||
  83:                 (y < ys && y >= yc) || (y > ys && y <= yc) )
  84:             {
  85:                 if(++qs > 4)qs=1;
  86:                 if(qs > 2)m = -1;
  87:                 else m = 1;
  88:                 flg=1;
  89:             }
  90:             cont(xc,yc);
  91:             xs = xc;
  92:             ys = yc;
  93:             if(qs == qf && flg == 1)
  94:                 switch(qs){
  95:                 case 1:
  96:                 case 4:
  97:                     if(ys >= y1)return;
  98:                     continue;
  99:                 case 2:
 100:                 case 3:
 101:                     if(ys <= y1)return;
 102:                 }
 103:         }
 104:     }
 105: }
 106: quad(x,y,xp,yp){
 107:     if(x < xp)
 108:         if(y <= yp)return(1);
 109:         else return(4);
 110:     else if(x > xp)
 111:         if(y < yp)return(2);
 112:         else return(3);
 113:     else if(y < yp)return(2);
 114:     else return(4);
 115: }
 116: abs(a){
 117:     if(a < 0)return(-a);
 118:     return(a);
 119: }

Defined functions

abs defined in line 116; used 2 times
  • in line 36(2)
arc defined in line 15; used 1 times
quad defined in line 106; used 2 times
step defined in line 12; used 2 times

Defined variables

del defined in line 11; used 6 times
sccsid defined in line 8; never used
Last modified: 1987-02-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 989
Valid CSS Valid XHTML 1.0 Strict