簡體   English   中英

Python:如果條件改變值

[英]Python: if condition changing value

我有以下代碼生成x_dx_y 然后,我想從最后計算的x和y(從config.get_last_point()返回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))

我遇到的問題是代碼生成的圖像類似於 這個 看起來不錯,不同的點具有不同的角度(您可以看到其中一些幾乎是封閉的,而另一些則非常開放)。 但是,當我將第一個if條件更改為(i % 2) == 0 and generate_left_concavity ,並用generate_left_concavityTrue ,我猜它類似於 這個圖片 問題是,確實存在開放的多邊形。

不幸的是,我嘗試了幾種不同的if條件,並且每當條件中具有generate_left_concavity時,它的生成方式總是不同的。 我什至嘗試嵌套if條件。

我相信我甚至嘗試過上述兩個條件,然后在以后的條件中,檢查if generate_left_concavity ,如果是,我加2 * x_d進行補償。 仍然會產生類似於 這個

我看不到有多少代碼可以直接影響基於if條件的x和y計算的生成,但是我可能是錯的。 但是,我可以保證它們始終進入相同的條件分支,但生成方式不同。

並不是一個真正的答案,但是:如果我認為有條件的事情很奇怪,我會盡量簡化條件的套件,以消除或分離可能的問題代碼。 您的可以重構:

        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

我進行了更多研究,結果發現,當我嘗試生成左凹面開放多邊形時,可能的角度范圍與右凹面開放多邊形的可能角度不同。 一旦我發現,如果我找到要生成的凹面的最小/最大允許角度,則它是在邊界內正確選擇一個角度,因此生成了我想要的方式:)感謝大家的幫助和指導!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM