Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)