Разделение квадрата на прямоугольники случайным образом
Имеется квадрат [8, 8, 0, 0] (ширина, высота, x, y) нужно разделить его на массив прямоугольников случайным образом. Каждый прямоугольник это массив который содержит его размер и его позицию. Делить до тех пор пока ширина либо высота прямоугольника не станет равна единице.
Ответы (1 шт):
Например, так:
На каждом шаге выбираем случайный прямоугольник из имеющегося активного набора (на первом шаге это исходный квадрат) и ставим точку в случайном месте внутри него.
Случайно выбираем направление разделения от данной точки - по горизонтали или по вертикали, делим прямоугольник на два. Убираем разделённый из активного набора.
Если какой-то из новых имеет размерность 1, кладём его в результат, если нет - в активный набор.
Собственно, выбирать прямоугольник случайным образом необязательно, этот выбор не влияет на распределение, поэтому можно всегда брать любой удобный - первый или последний.
stack.push(square)
while not stack.empty:
rect = stack.pop
pt = randomptinrect(rect)
dir = randomchoice([vert, hor])
if dir==vert:
r1 = rectangle(rect.left, rect.top, pt.x, rect.bottom)
if (pt.x - rect.left == 1) or (rect.right - pt.x == 1):
result.push(r1)
else:
stack.push(r1)
c r2 то же
else:
с горизонтальным разделением так же