Python - No reconoce dos lados del polygono..

 
Vista:
sin imagen de perfil

No reconoce dos lados del polygono..

Publicado por ANA (11 intervenciones) el 28/12/2017 15:54:02
Hola,

El ejercicio trata de crear cuatro cuadrantes iguales en la pantalla con dos líneas, dibujar un punto al azar en cada cuadrante, a partir de estos puntos, crear un polígono con relleno transparente. Después crear una función que dibuja el polígono con un relleno sólido cuando el cursor se encuentra dentro del polígono y vuelve a un polígono transparente cuando el cursor sale del polígono.

Para ello hemos usado la librería Tkinter.

El problema es que funciona siempre si el cursor se encuentra cerca de uno de los dos lados, los otros dos no los reconoce..

A qué puede deber eso? Será por la complejidad de la construcción del polígono que va cambiando la dirección de cada arista? O es por usar Tkinter?

Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

No reconoce dos lados del polygono..

Publicado por ANA (11 intervenciones) el 28/12/2017 17:18:00
o puede que sea por la funcion que hemos definido para comprobar que el cursor esta sobre el polygono.

La funcion la adjunto, si alguen me puede decir que esta correcta, por favor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def inside(q, pol):
    """ query point, polygon
        SHOULD ALWAYS BE POLYGON WITH LAST POINT SIMILAR TO FIRST. """
    is_inside = False
 
    # iterate segments
    for i in range(1, len(pol)):  # segments starts from 1, vertices = 0
        if q[1] > min(pol[i - 1][1], pol[i][1]):
            if q[1] < max(pol[i - 1][1], pol[i][1]):
                if q[0] <= max(pol[i - 1][0], pol[i][0]):
                    if pol[i - 1][1] != pol[i][1]:  # comparing Y coordinate of vertices to handle the irregular case
                        x_int = (pol[i][0] - pol[i - 1][0]) * \
                                q[1] - pol[i - 1][1] / \
                                       (pol[i][1] - pol[i - 1][1] + pol[i - 1][
                                           0])  # X coordinate of first point of the segment - Y
                        if q[0] <= x_int:
                            is_inside = not is_inside
    return is_inside
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar