Subversion Repositories planix.SVN

Rev

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

Rev Author Line No. Line
2 - 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
}