Сергей-4030: Все сообщения за 24 Апреля 2007 года

 
ПнВтСрЧтПтСбВс
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

Сергей-4030

исключающий третье
★★
>>А, ведь, на глаз задача решается как правило легко :) Каким же, интересно, алгоритмом?
AidarM> Мысленным закрашиванием всей области куда попали точки, последовательным выделением и отбрасыванием области, где точек явно нет. А потом - тщательное рассмотрение по краям неотброшенной области.

"Точек явно нет"? А как именно это узнать?

Лично мне кажется, что метод номер один - просто поиск в глубину. Чуть быстрее, чем перебирать все возможные варианты, хотя, конечно, не качественно быстрее. Это если
точек немного. Если много, предлагаю такой метод:

1. Исходная позиция - массив точек.

2. На основе всех наличествующих точек рисуем сетку из непересекающихся треугольников (разбиение не единственное, но "внешний контур" - единственный, заметьте).

3. Берем внешний контур получившейся сетки, отделяем ее от остальных. Для оставшихся точек повторяем процесс, снова берем контур и т.п. пока не будет набор контуров.

4. Идем из центра, "пробиваем дыры" из контура в контур (по принципу наименьшей площади "дыры"). Все, приехали.

Разумеется, полное решение нам такой способ не даст (если не пробовать все разбиения). Но, ИМХО, хорошее приближение.
step1.JPG (скачать) [428x390, 5,7 кБ]
 
step2.JPG (скачать) [428x390, 17,3 кБ]
 
 
 
Это сообщение редактировалось 24.04.2007 в 19:23

Сергей-4030

исключающий третье
★★
А собственно, если подумать - вроде как, как раз максимальную площадь и получим. Хотя хрен знает. Думать лень.
 

Сергей-4030

исключающий третье
★★
>>"Точек явно нет"? А как именно это узнать?
AidarM> Увидеть. :D Balancer спросил про алгоритм, по которому наши мозги работают.

А хрен знает, работают ли они в эту сторону. Пример, который я предложил выше - я и сам не очень-то знал, куда чего рисовать. Боюсь, если точек будет несколько сотен, наши мозги вполне могут и запутаться.
 

Сергей-4030

исключающий третье
★★
Поправка. "Дыры" надо искать не из центра, а наоборот - извне. И искать таким образом - нечетные "дыры" должны быть минимальной площади (они в минус пойдут), а четные - наоборот, максимальной. При этом поскольку "новые" дыры зависят от "старых", это будет алгоритм с возвратом. Фактически, поиск в глубину.
 

Сергей-4030

исключающий третье
★★
>>На основе всех наличествующих точек рисуем сетку из непересекающихся треугольников (разбиение не единственное, но "внешний контур" - единственный, заметьте).
AidarM> А как вы быстро отслеживаете непересечение?

Быстро - никак. Просто отслеживаю непересечение двух отрезков. Т.е. процесс "конечноэлементизации" будет относительно долгий. Но много быстрее, тем не менее, чем случайный поиск. А ничего другого мне просто на ум не идет.
 

Сергей-4030

исключающий третье
★★
Кстати, по некоторому раздумью - безусловно, алгоритм не дает максимальной площади. :( Ну и хрен с ним.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru