![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Кто-нибудь делал такое?
Нужно в неправильной фигуре расположить элементы разного размера, на картинке прямоугольники, но могу быть и другие. Я даже не знаю с чего начать, с центра распологать первый элемент, или рандомно их расположить. Сетку делать что ли, т.е. на сектора разбить так сказать, но я не знаю заведомо, какого размера объекты? Может кто встречал такое?
__________________
john |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Думаю, BitmapData тут подойдет.
|
|
|||||
|
очень сильно напоминает задачу о рюкзаке
Добавлено через 11 минут прошу прощения, поторопился. врядли она вам подойдет
__________________
я могу стать всем, если только захочу |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 88
|
Ну возникла идея, может подойдет:
1. генеришь рандомный обьект (obj1). 2. создаешь невидимый спрайт неправильной формы (как и требуется) 3. ставишь obj1 в рандомное место и проверяешь на hitTest, если совпало то addChild, если нет, то снова генерим координаты или hitPoint применять ps идия сходу так что оцените может бредовая. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 10
|
У меня подобная функция работает. Только объекты прямоугольные, поэтому пользуюсь Rectangle'ом для проверки пересечений. Как предложил etc, BitmapData поможет обобщить это и на твой случай. И у меня часть объектов обязательно будут помещены на поле, другая часть может быть игнорирована (например, если после 100 попыток поместить, объект не нашел пустого места).
Алгоритм примерно такой: 1. создается цикл for по количеству объектов, которые надо "впихнуть" 2. задается максимальное кол-во попыток найти пустое место (maxTryCount). Зануляется текущий счетчик (tryCount) и значение emptySpaceFound = true. В цикле do while: 3. создается/выбирается объект нужных размеров и с нужными координатами (у меня и то, и другое определяются случайно) 4. проверяется наличие свободного места (классы Rectangle и BitmapData дают достаточно средств, чтоб узнать, не пересекается ли создаваемый объект с уже существующими и "стенами") 5. дальше такой кусочек 6. заканчивается цикл while: 7. после while if (emptySpaceFound) { // добавляем объект в список добавленных на поле, рисуем его и т.д. } на Но в этом случае нужно добавить другую защиту от бесконечного while. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
В том и сложность этой задачи, что выбор случайных координат будет более-менее работать, пока объектов очень мало, а пустого места много. С каждым новым объектом вероятность пересечения со старыми возрастает.
Если фигура более-менее выпуклая, одним из простых возможных решений будет "утрамбовка" объектов "гравитацией". |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Да, чем-то попахивает на задачу о рюкзаке, пока с BitmapData буду ковырять.
__________________
john Последний раз редактировалось Molecula; 14.08.2009 в 15:00. |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 88
|
А что за подход с BitmapData? Совсем не понимаю идеи реализации.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нуу, пляски с hitTest-ом битмаповским, хотя наврядли он так просто тут поможет.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|