我有以下代码生成x_d
和x_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))
我遇到的问题是代码会生成类似于的图像。看起来不错,不同的点有不同的角度(你可以看到一些几乎是封闭的,另一些是非常开放的)。但是,当我将第一个
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计算的生成,但我可能错了。但是,我可以保证,他们总是进入相同的条件分支,但生成方式不同。
答案 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>