![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 05.04.2013
Сообщений: 2
|
![]()
Всем добрый день! Ребят,может кто поможет с кодом?! У меня точки на компоненте Image задаются графически (кликаем мышкой по компоненту в любом месте) и случайно. Графически все хорошо работает,а вот при случайном точки накладываются друг на друга. А должно быть так: в edit9 вводим количество центров скопления точек (сами центры воображаемые,они точкой не обозначаются),а в edit10 вводим число точек вокруг этих центров. И вот при щелчке на кнопку Button8 эти точки должны появляться на Image. То есть всего точек должно быть edit9*edit10 штук. А они у меня наслаиваются одна на другую.
Вот мой код: Код:
Последний раз редактировалось Stilet; 20.04.2013 в 21:09. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
чтобы сделать красивую систему частиц, недостаточно просто рамдомно натыкать точек.
вам нужно рандомные координаты обработать так, чтобы новый центр не появлялся рядом с существующими. самый тупой способ сделать это - генерировать рандомные координаты, пока не появятся подходящие. очень прост в реализации, но чем больше центров будет создано - тем больше вероятность получить бесконечный цикл... а еще можно сделать так: создать массив всех координат области (если единичный отрезок 1рх, то это будет array[1..Width*Height] of TPoint) функция Random будет генерировать не координаты, а индексы этого массива, а при создании очередного центра - удалять из массива координаты, где не должен появиться новый центр. по-моему это наилучший способ. такой подход подойдет только если в перспективе не понадобится анимировать эти центры... я советую вам копать в сторону, как ни странно, проверки столкновений. представьте, что области - это бильярдные шары, которые не могут пересекаться и решайте задачу исходя из этого. с маленькими точками точно так же. Последний раз редактировалось xrob; 20.04.2013 в 15:37. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Пускай у нас есть квадрат 100x100. Квадратом рулит некий менеджер, он же рисует центры. Чтобы было все более эпично пускай радиус будет случайным но не более 35% доступной области для действий. И так еть этот квадрат. В нем в случайном месте забирается место под точку N с радиусом X. Далее не хитрое дело вычесть из площади квадрата, площадь занятую окружностью плюс расстояние между окружностями. но для пущего аффекта сделал бы допущение некоторого % вхождения 1 окружности в пределы другой. |
|
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Цитата:
В общем случае сложность O(N^2). Лучше перемешать массив координат, а потом "закрасить" некоторую его часть, начиная с начала. Сложность O(N). |
||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
s-andriano, окей, можно тогда разбить область на одинаковые элементы,
и использовать в массиве их - массив будет меньше... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доступ к информации через точки на Image (карта с "горячими" точками) | dydochnik | Общие вопросы Delphi | 22 | 18.05.2012 10:34 |
Поиск всех путей в лабиринте от точки до точки | pavel_abelardo | Помощь студентам | 12 | 26.06.2011 00:23 |
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? | Rin | Мультимедиа в Delphi | 2 | 10.11.2009 22:47 |
даны две точки. организовать движение из точки А в точку Б окружности! | Wi1D | Помощь студентам | 6 | 23.05.2009 19:55 |
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть | Дикий | Помощь студентам | 7 | 12.05.2008 17:57 |