В качестве альтернативы, вы можете подойти к этой проблеме, так как желтые плитки «размываются» на синем фоне. Для этого на каждом шаге желтая плитка добавляет фиксированное число к «сумме эрозии» E всех фоновых плиток, соседствующих с ней, в кардинальном направлении (и, возможно, часть этого фоновые плитки соседствуют с ним по диагонали).
Затем, когда придет время разместить новую плитку, вы можете для каждой фоновой плитки выбрать случайное число от 0 до E ; величайший из них "размыт". В качестве альтернативы, вы можете сделать простой взвешенный случайный выбор с E их весами.
Для плиток 2x2 или 3x3 вы можете выбирать только плитки, которые подходящим образом «вписываются» в квадрат 2x2 или 3x3 (то есть 2x2 или 3x3 размытой плитки по краю, чтобы она не вызывала перекрытия). с уже размещенными плитками). Но на самом деле, вы никогда не получите ничего более естественного, чем одноразовое размещение эрозии / плитки.
Вы можете сэкономить время, пересчитывая суммы эрозии, сохраняя их при каждой итерации, только при добавлении новой плитки увеличивайте суммы эрозии вокруг нее (простая +=
). На данный момент, это по сути то же самое, что и другой предложенный ответ, хотя и с другой точки зрения / философии.
Пример сетки эрозионных сумм E , где прямые кардинальные соседи равны +4, а диагональные соседи равны +1:
Суммы эрозии http://img199.imageshack.us/img199/4766/erosion.png
Те с более высоким E , скорее всего, будут "размыты"; например, в этом случае два маленьких входа на западной и южной сторонах, скорее всего, будут размыты желтым, а за ними следуют меньшие заливы на северной и восточной сторонах. Наименее вероятны те, которые едва касаются желтого на один угол. Вы можете решить, какой из них либо назначить случайное число от 0 до E для каждого элемента мозаичного изображения и удалить значение с наибольшим случайным числом, либо сделать простой взвешенный случайный выбор, либо любым методом выбора по вашему выбору. .