假设我的窗户尺寸是400宽600高。在
在单侧生成一个随机点相对容易,比如说顶部:random.randint(0, width)
但是,什么是最聪明的方法来让这四个边都工作,这样一个随机点在一个矩形之外生成?在
如果我这么做
^{pr2}$
他们只会出现在角落,这是有道理的。我能想到的唯一方法是在矩形内随机创建一个点,比较哪个轴最接近边界,然后夹紧它。问题是我不知道如何优雅地做到这一点,不做4个检查每一方(这感觉多余)。我觉得有更简单的解决方法吗?在
这是一个几乎可行的解决方案,但它是如此冗长。只是意识到这样在角落里得到的点数更少。在# Create a random point inside the rectangle
pos_x = random.randint(0, width)
pos_y = random.randint(0, height)
# Get a distance for each side
left_border = pos_x
right_border = width-pos_x
top_border = pos_y
bottom_border = height-pos_y
borders = [left_border, right_border, top_border, bottom_border]
index_1 = 0
index_2 = 2
closest_side = 0
# Get closest from left/right borders
if right_border < left_border:
index_1 = 1
# Get closest from top/bottom borders
if bottom_border < top_border:
index_2 = 3
# Get closest border
if borders[index_1] < borders[index_2]:
closest_side = index_1
else:
closest_side = index_2
if closest_side == 0:
obj.pos.x = 0 # Clamp to left wall
elif closest_side == 1:
obj.pos.x = width # Clamp to right wall
elif closest_side == 2:
obj.pos.y = 0 # Clamp to top wall
else:
obj.pos.y = height # Clamp to bottom wall