我有以下代碼,它會生成一個x_d
和x_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))
我遇到的問題是代碼生成的圖像類似於。這看起來不錯,不同的點有不同的角度(你可以看到有些幾乎封閉,有些則非常開放)。但是,當我將第一個if
條件更改爲(i % 2) == 0 and generate_left_concavity
,並且我將它與generate_left_concavity
改爲True
時,我猜想類似於。問題是,真的有開放的多邊形。
不幸的是,我已經嘗試了幾種不同的條件,並且每當我在條件下有generate_left_concavity
時,總會產生不同的結果。我甚至嘗試嵌套if
條件。
我相信我已經嘗試了以上兩個條件,然後在以後的條件下,我檢查if generate_left_concavity
,如果是的話,我補充2 * x_d
來補償。它仍然會生成類似於的圖像。
根據if
條件,我看不出有多少代碼可能會直接影響x和y計算的生成,但我可能是錯的。然而,我可以保證,他們總是進入相同的條件分支,但產生不同。
如果你使用'(i%2)== 0和True',會發生什麼?如果你使用'((i%2)== 0)和True',會發生什麼? – 2014-08-28 14:02:18
創建'''config'''''' generate_left_concavity'''會影響它開始的點的順序嗎? – wwii 2014-08-28 14:11:34
我不確定我是否真的瞭解預期輸出和生成的解決方案之間的差異。我想,與角度太寬或太窄有關。但是,只看代碼,流程中似乎存在不對稱性。 'turns_angle = turning_angle - delta_angle'總是在條件之外執行,而在條件之一分支內添加,另一個減去。 – 2014-08-28 16:00:18