Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Интересная задача |
Философия, технологии, алгоритмы! |
|
|
Опции темы |
27.11.2007, 11:19 | #34 |
взрываю мозг
Сообщений: 3,586
Регистрация: 07.05.2003
Не в сети |
peace_man, НЕ ВЕРЮ.
НЕ путайте КРУГ и ОКРУЖНОСТЬ. И код не мне не нужен. Мне нужна идея, необходимое и достаточное ословие того, что n кругов имеют общую точку. Задача далеко не школьная. Кроме того, ее не каждый студент и даже выпускник ВУЗа, как оказалось, в состоянии решить. |
27.11.2007, 12:08 | #35 |
Форумец
Сообщений: 19
Регистрация: 25.06.2007
Возраст: 37
Не в сети |
Ну тогда - геморой...
Т.к. полученная фигура - выпуклая, то лишних проблем - не будет 1. Находим первые 2-е точки пересечения 1-ых 2-ух кругов(в смысле окружности эти кругов). Получим фигуру F1 2. Смотрим 3-ий круг по удаленности его центра до этих точек. Вот здесь нужно брать карандаш и рисовать всевозможные случаи (я их насчитал 4) пересечения 3-его круга с фигурой F1. В зависимости от типа пересечения - находим точки. Точка может быть одна, 2-е или 3, а может и весь круг(в данном случае возвращаемся к п.1). Получим фигуру F2 3. Смотрим круг 4-ый... PS: надо будет для каждой точки вновь полученной фигуры хранить № круга для того, чтобы была возможность проверить - пересекаются ли дуги. Излагаюсь я не совсем точно, но может кто-то и поймет... Мог бы написать, но: 1. Нет времени (тут работы часа на 3) 2. На PHP мало кто поймет... |
27.11.2007, 17:56 | #36 |
аццкий троглодит
Сообщений: 3,234
Регистрация: 28.02.2004
Возраст: 39
Не в сети |
предлагаю их просто тупо на экране отрисовывать )
фон - белый цвета у всех кругов разные. при попадании круга / его части на фон цвет не меняется. если на уже другой цвет, то складывать исходный и текущий... сумбурно, но, наверн, понятно о чем речь ) |
27.11.2007, 19:42 | #38 | |
Форумец
Сообщений: 2,376
Регистрация: 14.02.2004
Не в сети |
Цитата:
Всякое сечение шара плоскостью есть круг. Центр этого круга есть основание перпендикуляра, опущенного из центра шара на секущую плоскость. |
|
27.11.2007, 21:11 | #40 |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
SuHar`, такс, попытаюсь необходимое условие сформулировать. Если круги имеют общие точки, то их окружности пересекаются. Если существует точка, которая принадлежит всем кругам одновременно, то это обязательно будет точка пересечения хотя бы двух кругов (концентрические круги частный случай, проверяется отдельно - если нет ни одной точки пересечения и достаточное условие выполнено - смотри про расстояния между центрами и радиусы). Надеюсь это не надо доказывать, что множество точек, принадлежащих всем кругам будет иметь хотя бы две точки пересечения окружностей, если только окружности не концентрические - несложно проверяется. Задача сводится к следующему - найти все точки пересечения окружностей, а затем проверить каждую из этих точек на принадлежность к каждому из кругов (расстояние от центра до точки пересечения окружностей). Вроде, просто делается.
|
28.11.2007, 12:50 | #41 | |
взрываю мозг
Сообщений: 3,586
Регистрация: 07.05.2003
Не в сети |
Цитата:
Спасибо. Блин, и как же я сам не догадался? |
|
28.11.2007, 19:46 | #42 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|
28.11.2007, 23:12 | #44 | |
Форумец
Сообщений: 19
Регистрация: 25.06.2007
Возраст: 37
Не в сети |
Цитата:
|
|
28.11.2007, 23:16 | #45 | ||
Мегафорумец
Сообщений: 12,151
Регистрация: 28.11.2006
Возраст: 24
Не в сети |
Цитата:
Цитата:
|
||
28.11.2007, 23:38 | #46 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|
29.11.2007, 14:09 | #49 |
взрываю мозг
Сообщений: 3,586
Регистрация: 07.05.2003
Не в сети |
Так. Вроде додумался....
Сначала попарно рассматриваем все круги. Если нашлась пара пересекающихся окружностей, то подставляем точки их пересечения во все неравенства. Если хотя одна точка принадлежит всем неравенствам, значит задача решена. Если точки не принадлежат ни одному из неравенств или вообще не нашлось пары пересекающихся окружностей, то значит, что или общих точек у кругов нет, или существует по крайнем мере один круг, полностью находящийся внутри другого. Ищем вложенный круг. Если не найдется вложенных кругов, то общих точек у всех кругов нет. Если найдется вложенный круг, то тогда: ищем самый маленький вложенный круг, подставляем координаты его центра во все неравенства кругов. Если принадлежит - задача решена, если нет, то сравниваем его попарно со всеми другими кругами. Если найдется круг, который с ним пересекается, подставляем точки пересечения в неравенства. Если хоть одна удовл. всем неравенствам, то задача решена. Если нет, или не нашлось круга, который с ним пересекается, значит круги не имеют общих точек. Фубля... вроде все))). |
29.11.2007, 14:33 | #50 |
взрываю мозг
Сообщений: 3,586
Регистрация: 07.05.2003
Не в сети |
Если чуток оптимизировать, то алгоритм такой:
1. проходимся по всем кругам. удаляем те в которые вписаны другие круги. 2. если круг остался один - есть решение. выходим из проги. 3. находим все точки пересичения ОСТАВШИХСЯ окружностей. запоминаем их координаты и ТО К КАКИМ КРУГАМ ОНИ ОТНОСЯТСЯ. 4. Прогоняем точки по очеререди через неравенства кругов (не подставляем в те неравенства, пересечением окружностей которых они получены). Если удовлетворяет всем неравенствам - выходим. Есть решение! |
29.11.2007, 17:28 | #52 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|
29.11.2007, 20:31 | #56 |
Кроля-ля!
|
Добрый вечер, предлагаю такой вариант решения: все окружности имеют "крайние" координаты по x и по y. Условно говоря, для каждой окружности Cn максимальная координата по оси X--Xn+Rn, минимальная-- Xn-Rn. Если по оси Х все такие отрезки [Xn-Rn;Xn+Rn] пересекаются, находим такое же пересечение по оси У. Если и оно существует, то существует некая область пересечения. Если нет--то не судьба. Проверку пересечения отрезков, думаю, понятно как реализовывать.
Зы: найдете ошибку--не судите строго) |
29.11.2007, 20:46 | #58 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
Это для квадратов прокатило бы. |
|
29.11.2007, 20:49 | #59 |
Кроля-ля!
|
Я имею ввиду не попарное пересечение, а ОБЩЕЕ. Ищем пересечение для кругов С1 и С2, потом пересечение этого пересечения с С3 и т д пока не будет пустое множество или пока не дойдем до Сn. И так по каждой оси.
Зы: черезз полчаса код скину, если не облажаюсь)))) |