Геометрическая задача |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Геометрическая задача |
Berline |
Сообщение
#1
|
Гость |
Дано n точек на плоскости: найти окружность на заданных точках и содержащую наибольшее число заданных точек.
Буду очень признателен, если кто поможет написать программу! |
volvo |
Сообщение
#2
|
Гость |
Berline
Цитата содержащую наибольшее число заданных точек Что это значит? То есть как можно больше точек должны лежать на самой окружности, или круг должен содержать как можно больше точек? (по второму варианту есть вот эта задача)... |
Berline |
Сообщение
#3
|
Гость |
volvo
как я мог понять, то окружность должна содержать в себе максимальное число точек! Но не понятно одно, для построения окружности нуна 2 точки: 1 - центр, 2 - я, с помощью которой получится радиус! тада ведь мона постоить окружность содержащую все заданные точки... |
volvo |
Сообщение
#4
|
Гость |
Berline
Для однозначного задания окружности достаточно трех точек, но эта окружность не обязательно будет содержать остальные. |
Berline |
Сообщение
#5
|
Гость |
volvo
в пространстве нуны действительно 3, но на плоскости-то 2... переделать прогу из вышеизложенной ссылки я не смогу, т.к. с паскалем на вы... |
Altair |
Сообщение
#6
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Berline, ты ошибаешься, для построения окружности надо 3 точки на плоскости. (лежащие на окружности).
Код найти окружность на заданных точках Видимо надо найти 3 точки, такие чтьо окружность на этих 3 точках содержит макс. число других заданных точек... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
Сообщение
#7
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
перебираешь тройки точек, находишь центр , и проверешь сколько точек внутри лежат...
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
Сообщение
#8
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Berline, а ты не из МИЭМ часом ? :p2:
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Berline |
Сообщение
#9
|
Гость |
Oleg_Z
may be... |
ShadowWatcher |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
я бы воспользовался старым добрым брутфорсом. Принцип примерно такой:
1). Берём очередную тройку точек. 2). Вычисляем центр окпужности лежащей на них (x,y). 3). Вычисляем её радиус как расстояние до любой из выбранных точек ®. 4). Смотрим сколько ещё точек лежит на этой окружности (перебираем все остальные и подставляем в уравнение окружности). 5). Сравниваем с предыдущим ерзультатом: надо - сохраняем, не надо - забиваем... Куда уж проще-то... |
Berline |
Сообщение
#11
|
Гость |
ShadowWatcher
в теории эт понятно, но на практике... завтра пообсчаюсь с Oleg_Z'ом, авось что прояснится, если нет, бу здесь искать дальше помощи! |
ShadowWatcher |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Так ты поясни в каком именно моменте у тебя проблема. Разберёмся прямо здесь и сейчас...
|
Berline |
Сообщение
#13
|
Гость |
ShadowWatcher
проблема в том, что я паскалем я на вы, и написать прогу не могу, примитив(что нить про матрицу и поиск в ней какой нить строки) я ещё додумался как написать, а тут я ненаю даж что мине сделать, и как быть! |
ShadowWatcher |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Перебор сделать легко:
Код For i:= 0 To Count-3 Do For j:=i + 1 To Count-2 Do For k:=j + 1 To Count-1 Do Begin GetRoundCenterAndRadius(x[i],y[i],x[j],y[j],x[k],y[k],NewCenterX,NewCenterY,NewR); NewCount := 0; For l:=0 To Count Do If PointOnRound(NewCenterX,NewCenterY,NewR,x[l],y[l]) Then Inc(NewCount); If NewCount > CurrentCount Then Begin CurrentCenterX := NewCenterX; CurrentCenterY := NewCenterY; CurrentR := NewR End End; WriteLn('Center: (',CurrentCenterX,';',CurrentCenterY.')'); WriteLn('Radius: ',CurrentR) Предполагается, что процедура GetRoundCenterAndRadius по координатам трёх точек возвращает центр и радиус окружности, на которой они лежат, а функция PointOnRound проверяет лежит ли точка на окружности указанного радиуса и с центром в указанноё точке. Написал бы и их, но геометрию уже забывать начал да и компилятора под рукой нет... А так думаю, что принцип можно понять, а дописать особого труда не составит даже для начинающего |
Altair |
Сообщение
#15
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
ShadowWatcher? у тебя перебор неправильный, он не все переберет...
Цитата For i:= 0 To Count-3 Do For j:=i + 1 To Count-2 Do For k:=j + 1 To Count-1 Do Все-таки так: Код For i:= 0 To Count-2 Do For j:=i + 1 To Count-1 Do For k:=j + 1 To Count Do -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
ShadowWatcher |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Oleg_Z, не обижайся, но не тебе меня учить.
Как правило, если индексация с нуля, а кол-во элементов = Count, то последний элемент имеет индекс Count-1. |
Altair |
Сообщение
#17
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
ShadowWatcher, не обижайся, но не тебе со мной спорить.
Я рассматриваю адресацию как это обычно у людей бывает - с единицы. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
ShadowWatcher |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Oleg_Z, ну и не тебе со мной. Поверь ты мне - у меня практики куда больше, чем у тебя, и адресация у меня как правило (за исключением ОЧЕНЬ РЕДКИХ исключений) начинается с нуля.
|
volvo |
Сообщение
#19
|
Гость |
ShadowWatcher
Цитата ПРАВИЛА РАЗДЕЛА!!! ... 7. НЕ используйте форум для личного общения, все что не относиться к обсуждению темы на PM! |
Altair |
Сообщение
#20
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Поверь ты мне - у меня практики куда больше, чем у тебя Это абсолютно не важно. Цитата адресация у меня как правило Вот видишь, говорю же что у тебя не как у людей. ЗЫ: volvo прав, нарушаешь правила форума.... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Текстовая версия | 12.01.2025 4:00 |