start int umin,vmin,umax,vmax; int ax,ay, (point A) bx,by, (point B) mx,my; (midpoint) //check for trivial accept //for point A check for point A if((ax >= umin && ax <= umax )) && ((ay >= vmin && ay <= vmax)) return true // point A is within center region(0000); else return false; check for point B if((bx >= umin && bx <= umax )) && ((by >= vmin && by <= vmax)) return true // point B is within center region(0000); else return false; if both return true then trivial accept draw line from point A to point B else if both return false then trivial reject else if (A=true || B=false) { do //calculate midpoint mx = (bx - ax)/2; my = (by - ay)/2; //check if new point (mx,my) is within region if ((mx >= umin && mx <= umax) && (my >= vmin && my <= vmax)) return true; // midpoint is within region draw line from point A to midpoint else //midpoint now considered as point B mx=bx; my=by; //calculate new midpoint mx=(bx - ax)/2; my=(by - ay)/2; if ((mx >= umin && mx <= umax) && (my >= vmin && my <= vmax)) return true; // midpoint is within region draw line from point A to midpoint while (A=true || B=false) } else if (A=false || B=true) { do //calculate midpoint mx = (bx - ax)/2; my = (by - ay)/2; //check if new point (mx,my) is within region if ((mx >= umin && mx <= umax) && (my >= vmin && my <= vmax)) return true; // midpoint is within region draw line from point B to midpoint else //midpoint now considered as point B mx=ax; my=ay; //calculate new midpoint mx=(bx - ax)/2; my=(by - ay)/2; if ((mx >= umin && mx <= umax) && (my >= vmin && my <= vmax)) return true; // midpoint is within region draw line from point B to midpoint while (A=false || B=true) }