Python:如果条件改变了价值

时间:2014-08-28 13:41:46

标签: python if-statement point

我有以下代码生成x_dx_y。然后,我想要从最后计算的x和y(从config.get_last_point()返回)中添加或减去这些值,并将其存储在最新点。

 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))

我遇到的问题是代码会生成类似于this one的图像。看起来不错,不同的点有不同的角度(你可以看到一些几乎是封闭的,另一些是非常开放的)。但是,当我将第一个if条件更改为(i % 2) == 0 and generate_left_concavity时,我将其与generate_left_concavity称为True,我想类似于this image。问题是,确实有开放的多边形。

不幸的是,我尝试了一些不同的if条件,每当我遇到条件generate_left_concavity时,它总是以不同的方式生成。我甚至尝试过嵌套的if条件。

我相信我甚至尝试过以上两个条件,然后在稍后的情况下,我会检查if generate_left_concavity,如果是,我会添加2 * x_d来补偿。它仍会生成类似于this one的图像。

我不知道我的代码中有多少会直接影响基于if条件的x和y计算的生成,但我可能错了。但是,我可以保证,他们总是进入相同的条件分支,但生成方式不同。

2 个答案:

答案 0 :(得分:0)

不是真正的答案但是:如果我认为条件中出现了一些奇怪的东西,我会尝试使条件套件尽可能简单,以消除或分离可能的问题代码。你的可以重构:

        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

答案 1 :(得分:0)

我进一步研究了一下,结果发现,当我试图生成左凹开放多边形时,可能的角度范围与可能的角度不同。右凹开放多边形。一旦我发现如果我找到了我生成的凹度的最小/最大允许角度,那么它正确地选择了边界内的角度,因此,生成我想要的方式:)感谢大家的帮助和指导!< / p>