2014-08-28 61 views
2

我有以下代碼,它會生成一個x_dx_y。然後,我想從上一次計算的x和y(從config.get_last_point()返回)中添加或減去這些值,並將其存儲在最新點中。Python:如果條件改變值

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。問題是,真的有開放的多邊形。

不幸的是,我已經嘗試了幾種不同的條件,並且每當我在條件下有generate_left_concavity時,總會產生不同的結果。我甚至嘗試嵌套if條件。

我相信我已經嘗試了以上兩個條件,然後在以後的條件下,我檢查if generate_left_concavity,如果是的話,我補充2 * x_d來補償。它仍然會生成類似於this one的圖像。

根據if條件,我看不出有多少代碼可能會直接影響x和y計算的生成,但我可能是錯的。然而,我可以保證,他們總是進入相同的條件分支,但產生不同。

+0

如果你使用'(i%2)== 0和True',會發生什麼?如果你使用'((i%2)== 0)和True',會發生什麼? – 2014-08-28 14:02:18

+0

創建'''config'''''' generate_left_concavity'''會影響它開始的點的順序嗎? – wwii 2014-08-28 14:11:34

+0

我不確定我是否真的瞭解預期輸出和生成的解決方案之間的差異。我想,與角度太寬或太窄有關。但是,只看代碼,流程中似乎存在不對稱性。 'turns_angle = turning_angle - delta_angle'總是在條件之外執行,而在條件之一分支內添加,另一個減去。 – 2014-08-28 16:00:18

回答

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 
+0

感謝您的提示!我已經改變了自己的條件,就像你的條件一樣,實際上閱讀起來相當容易:)即使它沒有解決問題,我評論說上面:) – Brandon 2014-08-29 00:51:47