1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #include "mplot.h"
- /* arc plotting routine */
- /* from x1,y1 to x2,y2 */
- /* with center xc,yc and radius rr */
- /* integrates difference equation */
- /* negative rr draws counterclockwise */
- #define PI4 0.7854
- void rarc(double x1, double y1, double x2, double y2, double xc, double yc, double rr){
- register double dx, dy, a, b;
- double ph, dph, rd, xnext;
- register int n;
- dx = x1 - xc;
- dy = y1 - yc;
- rd = sqrt(dx * dx + dy * dy);
- if (rd / e1->quantum < 1.0) {
- move(xc, yc);
- vec(xc, yc);
- return;
- }
- dph = acos(1.0 - (e1->quantum / rd));
- if (dph > PI4)
- dph = PI4;
- ph=atan2((y2-yc),(x2 - xc)) - atan2(dy, dx);
- if (ph < 0)
- ph += 6.2832;
- if (rr < 0)
- ph = 6.2832 - ph;
- if (ph < dph)
- plotline(x1, y1, x2, y2);
- else {
- n = ph / dph;
- a = cos(dph);
- b = sin(dph);
- if (rr < 0)
- b = -b;
- move(x1, y1);
- while ((n--) >= 0) {
- xnext = dx * a - dy * b;
- dy = dx * b + dy * a;
- dx = xnext;
- vec(dx + xc, dy + yc);
- }
- }
- }
|