def run_algorithm (alg, input): """roda o algoritmo alg, usando input como entrada Retorna uma lista contendo o total de operacoes primitivas executadas e uma string opcionalmente retornada pelo algoritmo""" config_canvas (input) show = 1 if gui.hide_algorithm (): show = 0 hide_all () input_dup = input[:] ret = alg (input_dup) if not show: unhide_all () control.freeze_update () if hasattr (ret, 'hilight'): ret.hilight () elif hasattr (ret, 'plot'): ret.plot () control.thaw_update () extra_info = None if hasattr (ret, 'extra_info'): extra_info = ret.extra_info cont = prim.get_count () prim.reset_count () return (cont, extra_info)
def config_canvas (pontos): """Configura o canvas para mostrar os pontos passados.""" if len (pontos) == 0: return minx = pontos[0].x miny = pontos[0].y maxx = pontos[0].x maxy = pontos[0].y for i in pontos[1:]: if isinstance(i, Point): if i.x < minx: minx = i.x if i.y < miny: miny = i.y if i.x > maxx: maxx = i.x if i.y > maxy: maxy = i.y else: minx = min(minx, min(i.init.x, i.to.x)) miny = min(miny, min(i.init.y, i.to.y)) maxx = max(maxx, max(i.init.x, i.to.x)) maxy = max(maxy, max(i.init.y, i.to.y)) if minx == maxx: if minx == 0: minx = -1 maxx = 1 else: minx = int (0.9 * minx) maxx = int (1.1 * maxx) if miny == maxy: if miny == 0: miny = -1 maxy = 1 else: miny = int (0.9 * minx) maxx = int (1.1 * maxx) control.freeze_update () gui.config_canvas (minx, maxx, miny, maxy) for p in pontos: p.plot () # para "garantir" que os updates nao estao congelados control.thaw_update (10000000)
def triang(a, b, c): "desenha (e apaga) os lados do triangulo abc" a.lineto(c, config.COLOR_PRIM) b.lineto(a, config.COLOR_PRIM) c.lineto(b, config.COLOR_PRIM) control.thaw_update() control.update() control.freeze_update() control.sleep() a.remove_lineto(c) b.remove_lineto(a) c.remove_lineto(b)
def triang (a, b, c): "desenha (e apaga) os lados do triangulo abc" a.lineto (c, config.COLOR_PRIM) b.lineto (a, config.COLOR_PRIM) c.lineto (b, config.COLOR_PRIM) control.thaw_update () control.update () control.freeze_update () control.sleep () a.remove_lineto (c) b.remove_lineto (a) c.remove_lineto (b)
def dist2(a, b): "retorna o quadrado da distancia entre a e b" ida = a.hilight(config.COLOR_PRIM) idb = b.hilight(config.COLOR_PRIM) a.lineto(b, config.COLOR_PRIM) control.thaw_update() control.update() control.freeze_update() control.sleep() a.remove_lineto(b) a.unhilight(ida) b.unhilight(idb) return prim.dist2(a, b)
def dist2 (a, b): "retorna o quadrado da distancia entre a e b" ida = a.hilight (config.COLOR_PRIM) idb = b.hilight (config.COLOR_PRIM) a.lineto (b, config.COLOR_PRIM) control.thaw_update () control.update () control.freeze_update () control.sleep () a.remove_lineto (b) a.unhilight (ida) b.unhilight (idb) return prim.dist2(a, b)
def config_canvas (pontos): """Configura o canvas para mostrar os pontos passados.""" if len (pontos) == 0: return minx = pontos[0].x miny = pontos[0].y maxx = pontos[0].x maxy = pontos[0].y for i in pontos[1:]: if i.x < minx: minx = i.x if i.y < miny: miny = i.y if i.x > maxx: maxx = i.x if i.y > maxy: maxy = i.y if minx == maxx: if minx == 0: minx = -1 maxx = 1 else: minx = int (0.9 * minx) maxx = int (1.1 * maxx) if miny == maxy: if miny == 0: miny = -1 maxy = 1 else: miny = int (0.9 * minx) maxx = int (1.1 * maxx) control.freeze_update () gui.config_canvas (minx, maxx, miny, maxy) for p in pontos: p.plot () # para "garantir" que os updates nao estao congelados control.thaw_update (10000000)
def config_canvas (input): """Configura o canvas para mostrar os pontos passados.""" if len (input) == 0: return elif input[0].__class__.__name__ == 'Segment': minx = min(input[0].init.x, input[0].to.x) maxx = max(input[0].init.x, input[0].to.x) miny = min(input[0].init.y, input[0].to.y) maxy = max(input[0].init.y, input[0].to.y) for i in input[1:]: ex,ey = i.init.x, i.init.y dx,dy = i.to.x, i.to.y minx = min(minx, ex, dx) maxx = max(maxx, ex, dx) miny = min(miny, ey, dy) maxy = max(maxy, ey, dy) else: minx = input[0].x miny = input[0].y maxx = input[0].x maxy = input[0].y for i in input[1:]: if i.x < minx: minx = i.x if i.y < miny: miny = i.y if i.x > maxx: maxx = i.x if i.y > maxy: maxy = i.y if minx == maxx: if minx == 0: minx = -1 maxx = 1 else: minx = int (0.9 * minx) maxx = int (1.1 * maxx) if miny == maxy: if miny == 0: miny = -1 maxy = 1 else: miny = int (0.9 * minx) maxx = int (1.1 * maxx) control.freeze_update () gui.config_canvas (minx, maxx, miny, maxy) for p in input: p.plot () # para "garantir" que os updates nao estao congelados control.thaw_update (10000000)