Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Интересная задача |
Философия, технологии, алгоритмы! |
|
|
Опции темы |
29.11.2007, 21:10 | #62 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
Не надо кода... Кодить - это не профессия программиста... |
|
29.11.2007, 21:17 | #63 |
Кроля-ля!
|
program Project2;
{$APPTYPE CONSOLE} uses SysUtils,Windows,Math; Const maxN=100; Type TMas= Array [1..maxN] of real; {Каждый массив--это набор минимальных и максимальных координат для каждой из осей Х и У. Индексы соответствуют номеру окружности} Var minX,minY,maxX,maxY:Tmas; n:integer; {Ввод данных} procedure InputCircle(var n:integer;var minX,minY,maxX,maxY:Tmas); var x,y,r:real; i:integer; begin writeln('Введи кол-во окружностей(от 0 до MaxN)?'); readln(n); writeln('ВВоди координаты окружности в порядке: x y r через пробел'); for i:=1 to n do begin writeln(i,' круг?:'); readln(x,y,r); {Заполнение массивов} minX[i]:=x-r; maxX[i]:=x+r; minY[i]:=y-r; maxY[i]:=y+r; end; end; {Проверка, пересекаются ли координаты окружностей по 1 какой-то оси} Function IsCross(minMas,maxMas:Tmas):boolean; var ok:boolean; low,hi:real; i:integer; begin i:=2; low:=minMas[1]; {нижняя граница общего отрезка пересечения} hi:=maxMas[1]; {верхняя граница его же} ok:=True; while ok and (i<=n) do begin {Рассматриваем очередной круг. Нижнюю грань общего отрезка опре- деляем как максимум из предыдущей нижней грани и нижней грани рассматриваемого круга. Верхнюю грань--через минимум. Если верхняя оказалась за нижней--то нет пересечения. Иначе продолжаем} low:=max(low,minMas[i]); hi:=min(hi,maxmas[i]); if low>hi then ok:=false else i:=i+1 end; IsCross:=Ok; end; begin SetConsoleCp(1251); SetConsoleOutputCp(1251); InputCircle(n,minX,minY,maxX,maxY); if IsCross(minX,maxX) {Проверка по Х} and IsCross(minY,maxY) {ПРоверка по У} then writeln('пересекаются') else writeln('не пересекаются'); readln; end. |
29.11.2007, 21:20 | #64 |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Зачем кодить неправильный алгоритм? Или кодить, по-твоему, сложно? Ты в кодеры готовишься?
Область А удовлетворяет твоим условиям, но ответ будет неверным, потому что три окружности не имеют общих точек пересечения, хотя, по твоим выкладкам, должны. |
29.11.2007, 21:24 | #67 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|
29.11.2007, 21:30 | #68 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|
29.11.2007, 21:40 | #70 |
Кроля-ля!
|
А вот подскажите, если аналогичным образом рассматривать не круги, а области их попарного пересечения, то результат тот же будет???
ЗЫ: просто самой интересно стало. В голову ничего лучше не пришло(((( |
29.11.2007, 21:47 | #71 |
взрываю мозг
Сообщений: 3,600
Регистрация: 07.05.2003
Не в сети |
Оля-ля, Я сначала так и подумал, что ты области рассмотривала)))
Рассмотрим рисунок, который нам предоставил Milky Man. Если система координат расположена стандартно, то такой способ действительно выдаст отрицательный результат. Но если ее определенным образом повернуть, то по этому способу получится, что круги имеют общие точки. Если меня конечно глазомер не подводит... |
29.11.2007, 22:07 | #73 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
Я показал касательными точки, которые будут расматриваться, получилось пересечение трёх областей касательных - область А. Куда что ещё надо поворачивать? |
|
29.11.2007, 22:10 | #74 | |
киллер
Сообщений: 3,231
Регистрация: 24.05.2006
Не в сети |
Цитата:
|
|