|
|
1.1 ! root 1: #include <jerq.h> ! 2: ! 3: #define ONE 512 ! 4: ! 5: Point buf1[128], buf2[128], *old = buf2, *new = buf1; ! 6: ! 7: jdraw(b) ! 8: Bitmap *b; ! 9: { ! 10: } ! 11: #ifdef AGH ! 12: /* ! 13: for(j = nx+ny-3; j > 0; j--) ! 14: { ! 15: y = min(ny-1, j); ! 16: lasty = x = j-y; ! 17: while(y != lasty) ! 18: { ! 19: POLY(x, y, x, y-1, x+1, y-1, x+1, y); ! 20: x++; ! 21: y--; ! 22: } ! 23: wait(CPU); ! 24: } ! 25: */ ! 26: Point left, right, p, *np, *op; ! 27: int wleft; ! 28: ! 29: old[0].y = -1; ! 30: np = new; ! 31: op = old; ! 32: nextpt(np++); ! 33: nextpt(np++); ! 34: left = np[-1]; ! 35: segment(b, new[0], new[1], F_OR); ! 36: ! 37: while(nextpt(&right)) ! 38: { ! 39: if(left.x > right.x) ! 40: { ! 41: left = right; ! 42: np->y = -1; ! 43: np = old; old = new; new = np; op = old; ! 44: continue; ! 45: } ! 46: if(left.x < op->x) ! 47: { ! 48: *np++ = left; ! 49: *np++ = right; ! 50: segment(b, left, right, F_OR); ! 51: } ! 52: else if(left.x > op->x) ! 53: *np++ = *op++; ! 54: else ! 55: { ! 56: ! 57: } ! 58: left = right; ! 59: } ! 60: } ! 61: ! 62: addseg(b, l, ls, r, rs) ! 63: Bitmap *b; ! 64: Point l, r; ! 65: register Segment *ls, *rs; ! 66: { ! 67: register Segment *s; ! 68: ! 69: if(l.x != ls->l.x) ! 70: { ! 71: s = newseg(l, ls->r); ! 72: ls->r = l; ! 73: s->next = ls->next; ! 74: ls->next = s; ! 75: if(ls == rs) rs = s; ! 76: } ! 77: else ! 78: ls->l.y = l.y; ! 79: recalc(ls); ! 80: if(r.x != rs->r.x) ! 81: { ! 82: s = newseg(r, rs->r); ! 83: rs->r = r; ! 84: s->next = rs->next; ! 85: rs->next = s; ! 86: } ! 87: else ! 88: rs->r.y = r.y; ! 89: recalc(rs); ! 90: segment(b, l, r, F_OR); ! 91: } ! 92: ! 93: static Segment * ! 94: newseg(l, r) ! 95: Point l, r; ! 96: { ! 97: register Segment *s; ! 98: ! 99: s = (Segment *)alloc(sizeof *s); ! 100: s->next = 0; ! 101: s->l = l; ! 102: s->r = r; ! 103: recalc(s); ! 104: return(s); ! 105: } ! 106: ! 107: recalc(s) ! 108: register Segment *s; ! 109: { ! 110: s->m = muldiv(s->r.y-s->l.y, ONE, s->r.x-s->l.x); ! 111: s->b = s->l.y - muldiv(s->m, s->l.x, ONE); ! 112: } ! 113: ! 114: crosses(s, l, r, p) ! 115: Segment *s; ! 116: Point l, r, *p; ! 117: { ! 118: register m, b; ! 119: ! 120: m = muldiv(r.y-l.y, ONE, r.x-l.x); ! 121: if(m == s->m) return(0); ! 122: b = l.y - s->m*l.x; ! 123: p->x = muldiv(s->b-b, ONE, m-s->m); ! 124: p->y = m*p->x + b; ! 125: return((p->x >= s->l.x) && (p->x <= s->r.x) && (p->x >= l.x) && (p->x <= r.x)); ! 126: } ! 127: ! 128: ptrels(p, s) ! 129: Point p; ! 130: Segment *s; ! 131: { ! 132: register Segment *s; ! 133: ! 134: if((s->l.y < 0) || (s->r.y < 0)) return(1); ! 135: return((muldiv(s->m, p.x, ONE)+s->b) - p.y); ! 136: } ! 137: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.