Blame


1 4314729d 2004-04-14 devnull #include "mplot.h"
2 4314729d 2004-04-14 devnull /* arc plotting routine */
3 4314729d 2004-04-14 devnull /* from x1,y1 to x2,y2 */
4 4314729d 2004-04-14 devnull /* with center xc,yc and radius rr */
5 4314729d 2004-04-14 devnull /* integrates difference equation */
6 4314729d 2004-04-14 devnull /* negative rr draws counterclockwise */
7 4314729d 2004-04-14 devnull #define PI4 0.7854
8 4314729d 2004-04-14 devnull void rarc(double x1, double y1, double x2, double y2, double xc, double yc, double rr){
9 4314729d 2004-04-14 devnull register double dx, dy, a, b;
10 4314729d 2004-04-14 devnull double ph, dph, rd, xnext;
11 4314729d 2004-04-14 devnull register int n;
12 4314729d 2004-04-14 devnull dx = x1 - xc;
13 4314729d 2004-04-14 devnull dy = y1 - yc;
14 4314729d 2004-04-14 devnull rd = sqrt(dx * dx + dy * dy);
15 4314729d 2004-04-14 devnull if (rd / e1->quantum < 1.0) {
16 4314729d 2004-04-14 devnull move(xc, yc);
17 4314729d 2004-04-14 devnull vec(xc, yc);
18 4314729d 2004-04-14 devnull return;
19 4314729d 2004-04-14 devnull }
20 4314729d 2004-04-14 devnull dph = acos(1.0 - (e1->quantum / rd));
21 4314729d 2004-04-14 devnull if (dph > PI4)
22 4314729d 2004-04-14 devnull dph = PI4;
23 4314729d 2004-04-14 devnull ph=atan2((y2-yc),(x2 - xc)) - atan2(dy, dx);
24 4314729d 2004-04-14 devnull if (ph < 0)
25 4314729d 2004-04-14 devnull ph += 6.2832;
26 4314729d 2004-04-14 devnull if (rr < 0)
27 4314729d 2004-04-14 devnull ph = 6.2832 - ph;
28 4314729d 2004-04-14 devnull if (ph < dph)
29 4314729d 2004-04-14 devnull plotline(x1, y1, x2, y2);
30 4314729d 2004-04-14 devnull else {
31 4314729d 2004-04-14 devnull n = ph / dph;
32 4314729d 2004-04-14 devnull a = cos(dph);
33 4314729d 2004-04-14 devnull b = sin(dph);
34 4314729d 2004-04-14 devnull if (rr < 0)
35 4314729d 2004-04-14 devnull b = -b;
36 4314729d 2004-04-14 devnull move(x1, y1);
37 4314729d 2004-04-14 devnull while ((n--) >= 0) {
38 4314729d 2004-04-14 devnull xnext = dx * a - dy * b;
39 4314729d 2004-04-14 devnull dy = dx * b + dy * a;
40 4314729d 2004-04-14 devnull dx = xnext;
41 4314729d 2004-04-14 devnull vec(dx + xc, dy + yc);
42 4314729d 2004-04-14 devnull }
43 4314729d 2004-04-14 devnull }
44 4314729d 2004-04-14 devnull }