Tengo el siguiente código que genera un x_d y x_y. Luego quiero sumar o restar estos valores de los últimos x e y calculados (devueltos desde config.get_last_point()), y almacenarlos en el último punto.

 def generate_asv_configuration(
        asv_count, generate_left_concavity, corner_angle=None):
    # Create a configuration
    config = Configuration(generate_left_concavity)

    for i in range(2, asv_count):
        # Calculate the angle to be used in the calculations
        turning_angle = turning_angle - delta_angle

        # Calculate the delta-x, and -y.
        x_d = MAX_BOOM_LENGTH * math.cos(turning_angle)
        y_d = MAX_BOOM_LENGTH * math.sin(turning_angle)

        # print generate_left_concavity
        if (i % 2) == 0:
            print '1: Left, i: {0}'.format(i)
            x = config.get_last_point()[0] - x_d
            y = config.get_last_point()[1] - y_d
        else:
            print '2: Right, i: {0}'.format(i)
            x = config.get_last_point()[0] + x_d
            y = config.get_last_point()[1] + y_d
        config.add_point((x, y))

El problema que tengo es que el código genera una imagen similar a this one. Eso se ve bien, los diferentes puntos tienen ángulos variables (puede ver que algunos están casi cerrados, otros están muy abiertos). Sin embargo, cuando cambio la primera condición if a (i % 2) == 0 and generate_left_concavity, y la llamo con generate_left_concavity a True, supongo que algo similar a esta imagen. El problema es que realmente hay polígonos abiertos.

Desafortunadamente, he intentado algunas condiciones if diferentes, y cada vez que tengo generate_left_concavity en la condición, siempre se genera de manera diferente. Incluso he intentado condiciones if anidadas.

Creo que incluso he intentado tener las dos condiciones anteriores, luego, en una condición posterior, verifico if generate_left_concavity, si es así, agrego 2 * x_d para compensar. Todavía genera imágenes similares a this one.

No veo cuánto de mi código podría afectar directamente la generación de cálculos xey basados en una condición if, pero podría estar equivocado. Sin embargo, puedo garantizar que siempre entran en la misma rama de condición, pero se generan de manera diferente.

2
Brandon 28 ago. 2014 a las 17:41

2 respuestas

La mejor respuesta

He investigado un poco más, y resulta que cuando estoy tratando de generar un polígono abierto de concavidad izquierda, el rango de ángulos que son posibles son diferentes a los ángulos posibles para un polígono abierto de concavidad derecha. Una vez que descubrí que si encuentro los ángulos mínimos / máximos permitidos para la concavidad que estoy generando, estaba seleccionando correctamente un ángulo dentro de los límites, por lo tanto, generando la forma que quiero :) ¡Gracias a todos por su ayuda y orientación!

0
Brandon 1 sep. 2014 a las 04:39

Realmente no es una respuesta, pero: si creo que algo extraño está sucediendo en un condicional, trato de hacer que las suites condicionales sean lo más simples posible para eliminar o separar el posible código del problema. El tuyo podría ser refactorizado:

        if (i % 2) == 0:
            print '1: Left, i: {0}'.format(i)
            x_d, y_d = -x_d, -y_d
        else:
            print '2: Right, i: {0}'.format(i)
        x = config.get_last_point()[0] + x_d
        y = config.get_last_point()[1] + y_d
0
wwii 28 ago. 2014 a las 14:15