[英]Python: if condition changing value
我有以下代碼生成x_d
和x_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_concavity
為True
,我猜它類似於 。 問題是,確實存在開放的多邊形。
不幸的是,我嘗試了幾種不同的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.