|
|
|||||
Регистрация: Jun 2008
Сообщений: 126
|
Равномерно расположить объекты
Нужно посадить на карте N деревьев. N будет маленьким, штук 12.
Нужно чтобы позиции деревьев были случайными и деревья были распределены по карте примерно равномерно. Если делать то деревья сбиваются в кучи. По какому запросу гуглить решение? |
|
|||||
Если в лоб, то генерируйте точку, в которую хотите поставить дерево.
Потом проверяйте не слишком ли она близко к какой-либо еще. И если все хорошо, то ставьте дерево, если все не очень хорошо -- генерите следующую точку. Может быть, у вас будет столько деревьев, что с надлежащей дистанцией их рассадить не получится. В таком случае после определенного количества холостых проходов можно начать постепенно уменьшать желаемую дистанцию. И так до тех пор, пока все не рассадится.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Тогда лучше сразу сделать сетку из точек удаленных на одинаковое положение
друг от друга, а потом от этих точек находить конечные точки деревьев удаленых на рандомный, с зарание установленным максимумом, радиус и рандомный градус. |
|
|||||
Регистрация: Jul 2009
Сообщений: 149
|
Либо разбить на сетку ячеек(плиток) и помещать каждое дерево в случайные координаты соответствующей ячейки.
var linesCount:int = 4; var columnsCount:int = 3; var cellWidth:Number = stage.stageWidth / linesCount; var cellHeight:Number = stage.stageHeight / columnsCount; for (var i:int = 0; i < linesCount; i++) { for (var j:int = 0; j < columnsCount; j++) { var tree:Tree = new Tree(); var treeX:Number = randomInInterval(i * cellWidth, (i + 1) * cellWidth); var treeY:Number = randomInInterval(j * cellWidth, (j + 1) * cellWidth); tree.x = treeX; tree.y = treeY; addChild(tree); } } private function randomInInterval(start:Number = 0, end:Number = 1):Number { return start + Math.random() * (end - start); } Последний раз редактировалось ObOs; 14.11.2014 в 17:37. |
Часовой пояс GMT +4, время: 13:20. |
|
« Предыдущая тема | Следующая тема » |
|
|