|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include <line.h> ! 3: static x0, y0; ! 4: ! 5: segment(b, p, q, f) ! 6: Bitmap *b; ! 7: Point p, q; ! 8: { ! 9: if(p.x==q.x && p.y==q.y) ! 10: return; ! 11: q=Jsetline(p, q); ! 12: Jclipline(b, b->rect, p, q, f); ! 13: } ! 14: floor(x,y) ! 15: register long x; ! 16: register y; ! 17: { ! 18: if (y<=0) { ! 19: if (y==0) return((short) x); ! 20: y= -y; x= -x; ! 21: } ! 22: if (x<0) x -= y-1; ! 23: return((short) (x/y)); ! 24: } ! 25: ! 26: ceil(x,y) ! 27: register long x; ! 28: register y; ! 29: { ! 30: if (y<=0) { ! 31: if (y==0) return((short) x); ! 32: y= -y; x= -x; ! 33: } ! 34: if (x>0) x += y-1; ! 35: return((short) (x/y)); ! 36: } ! 37: Jminor(x) ! 38: register x; ! 39: { ! 40: register y; ! 41: y=floor(2*(long)(x-x0)*Jdminor+Jdmajor, 2*Jdmajor)+y0; ! 42: return Jslopeneg? -y : y; ! 43: } ! 44: Jmajor(y) ! 45: register y; ! 46: { ! 47: register x; ! 48: x=ceil(2*(long)((Jslopeneg? -y : y)-y0)*Jdmajor-Jdminor, 2*Jdminor)+x0; ! 49: if(Jdminor) ! 50: while(Jminor(x-1)==y) ! 51: x--; ! 52: return x; ! 53: } ! 54: Point ! 55: Jsetline(p, q) ! 56: Point p, q; ! 57: { ! 58: register dx, dy, t; ! 59: Point endpt; ! 60: short swapped=0; ! 61: Jxmajor=1; ! 62: Jslopeneg=0; ! 63: dx=q.x-p.x; ! 64: dy=q.y-p.y; ! 65: if(abs(dy) > abs(dx)){ /* Steep */ ! 66: Jxmajor=0; ! 67: #define XYswap(p) t=p.x; p.x=p.y; p.y=t ! 68: XYswap(p); ! 69: XYswap(q); ! 70: #define Swap(x, y) t=x; x=y; y=t ! 71: Swap(dx, dy); ! 72: } ! 73: if(dx<0){ ! 74: swapped++; ! 75: Swap(p.x, q.x); Swap(p.y, q.y); ! 76: dx= -dx; dy= -dy; ! 77: } ! 78: if(dy<0){ ! 79: Jslopeneg++; ! 80: dy= -dy; p.y= -p.y; q.y= -q.y; ! 81: } ! 82: Jdminor=dy; ! 83: Jdmajor=dx; ! 84: x0=p.x; ! 85: y0=p.y; ! 86: endpt.x=swapped? p.x+1 : q.x-1; ! 87: endpt.y=Jminor(endpt.x); ! 88: if(!Jxmajor){ ! 89: XYswap(endpt); ! 90: } ! 91: return(endpt); ! 92: } ! 93: Jsetdda(x) ! 94: register x; ! 95: { ! 96: register y; ! 97: y=Jminor(x); ! 98: if(Jslopeneg) ! 99: y= -y; ! 100: return (short)((2*(x-x0)+2)*(long)Jdminor ! 101: -(2*(y-y0)+1)*(long)Jdmajor); ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.