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