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