IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Геометрическая задача
сообщение
Сообщение #1


Гость






Дано n точек на плоскости: найти окружность на заданных точках и содержащую наибольшее число заданных точек.

Буду очень признателен, если кто поможет написать программу!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Berline
Цитата
содержащую наибольшее число заданных точек

Что это значит? То есть как можно больше точек должны лежать на самой окружности, или круг должен содержать как можно больше точек? (по второму варианту есть вот эта задача)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






volvo
как я мог понять, то окружность должна содержать в себе максимальное число точек! Но не понятно одно, для построения окружности нуна 2 точки: 1 - центр, 2 - я, с помощью которой получится радиус! тада ведь мона постоить окружность содержащую все заданные точки...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Berline
Для однозначного задания окружности достаточно трех точек, но эта окружность не обязательно будет содержать остальные.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






volvo
в пространстве нуны действительно 3, но на плоскости-то 2...
переделать прогу из вышеизложенной ссылки я не смогу, т.к. с паскалем на вы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Berline, ты ошибаешься, для построения окружности надо 3 точки на плоскости. (лежащие на окружности).

Код
найти окружность на заданных точках

Видимо надо найти 3 точки, такие чтьо окружность на этих 3 точках содержит макс. число других заданных точек...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


перебираешь тройки точек, находишь центр , и проверешь сколько точек внутри лежат...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Berline, а ты не из МИЭМ часом ? rolleyes.gif :p2:


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Oleg_Z
may be...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


я бы воспользовался старым добрым брутфорсом. Принцип примерно такой:
1). Берём очередную тройку точек.
2). Вычисляем центр окпужности лежащей на них (x,y).
3). Вычисляем её радиус как расстояние до любой из выбранных точек ®.
4). Смотрим сколько ещё точек лежит на этой окружности (перебираем все остальные и подставляем в уравнение окружности).
5). Сравниваем с предыдущим ерзультатом: надо - сохраняем, не надо - забиваем...

Куда уж проще-то...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






ShadowWatcher
в теории эт понятно, но на практике... завтра пообсчаюсь с Oleg_Z'ом, авось что прояснится, если нет, бу здесь искать дальше помощи!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Так ты поясни в каком именно моменте у тебя проблема. Разберёмся прямо здесь и сейчас...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






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 проверяет лежит ли точка на окружности указанного радиуса и с центром в указанноё точке.

Написал бы и их, но геометрию уже забывать начал да и компилятора под рукой нет... А так думаю, что принцип можно понять, а дописать особого труда не составит даже для начинающего smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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


smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Oleg_Z, не обижайся, но не тебе меня учить.
Как правило, если индексация с нуля, а кол-во элементов = Count, то последний элемент имеет индекс Count-1.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


ShadowWatcher, не обижайся, но не тебе со мной спорить.
Я рассматриваю адресацию как это обычно у людей бывает - с единицы.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Oleg_Z, ну и не тебе со мной. Поверь ты мне - у меня практики куда больше, чем у тебя, и адресация у меня как правило (за исключением ОЧЕНЬ РЕДКИХ исключений) начинается с нуля.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






ShadowWatcher
Цитата
ПРАВИЛА РАЗДЕЛА!!!
...
7. НЕ используйте форум для личного общения, все что не относиться к обсуждению темы на PM!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Поверь ты мне - у меня практики куда больше, чем у тебя

Это абсолютно не важно.

Цитата
адресация у меня как правило

Вот видишь, говорю же что у тебя не как у людей.

ЗЫ: volvo прав, нарушаешь правила форума....


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.01.2025 4:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name