Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2015, 16:51   #1
artiom4356
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 78
Вопрос Помощь с задачей:Даны два множества точек на плоскости. Найти радиус и центр окружности, проходящей через n (n>=3) точек множества

Может кто скинет алгоритм решения? А остальное могу сам сделать.
Задача:
Даны два множества точек на плоскости. Найти радиус и центр окружности, про*ходящей через n (n>=3) точек первого множества и содержащей строго внутри себя равное число точек первого и второго множеств.
Помочь!=Сделать за тебя

Последний раз редактировалось artiom4356; 16.12.2015 в 17:01.
artiom4356 вне форума Ответить с цитированием
Старый 16.12.2015, 17:05   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А центр может быть где угодно или должен быть расположен в любой из точек множеств?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 16.12.2015, 17:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

исключительно переборная задача.
вам нужно написать
следующие подпрограммы (функции/процедуры)

1) известно, что
Через любые три точки плоскости, не лежащие на одной прямой, можно провести единственную окружность.
Вам нужно по заданным трём точкам находить центр окружности и её радиус.

2) простенькая функция для проверки отношения точки к данной окружности
функция должна возвращать значение
точка лежит внутри окружности (строго) или точка за пределами окружности (строго).

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

финита.



Цитата:
Сообщение от WorldMaster
А центр может быть где угодно или должен быть расположен в любой из точек множеств?
думаю, что раз в задании не сказано - то центр окружности может быть где угодно.

p.s. чуть погуглил. Готовый код для нахождения окружности по трём точками найти проще простого.

Последний раз редактировалось Serge_Bliznykov; 16.12.2015 в 17:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 17:23   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

вот и метод есть МЕТОД
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 16.12.2015, 17:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

угу. Видел. А ещё, я в процессе поиска наткнулся на готовый код решения ПОХОЖЕЙ задачи.

(c) Puporev
Код:
uses crt;
const nmax=50;
      e=0.01;
type
Point=record {точка}
      x,y:real;{координаты}
      end;
Okruz=record {окружность}
      o:Point;{координаты центра}
      r:real;{радиус}
    end;
MassP=array[1..nmax] of Point; {множество-массив точек}
procedure Tochki(var t:MassP;var n:integer);{создание множества точек}
var i:integer;
begin
repeat
write('Количество точек от 3 дo ',nmax,' n=');
readln(n);
until n in [3..nmax];
for i:=1 to n do
 begin
  t[i].x:=10*random;
  t[i].y:=10*random;
 end;
write('X:');
for i:=1 to n do
write(t[i].x:5:2);
writeln;
write('Y:');
for i:=1 to n do
write(t[i].y:5:2);
writeln;
end;
{вычисление параметров окружности, проходящей через три точки}
procedure Okr(t1,t2,t3:Point;var ok:Okruz);
var a,b,x,y:real;
    k0,k1,k2,m0,m1,m2:real;
begin
k0:=sqr(t1.x)-sqr(t2.x)+sqr(t1.y)-sqr(t2.y);
k1:=2*(t1.y-t2.y);
k2:=2*(t1.x-t2.x);
m0:=sqr(t1.x)-sqr(t3.x)+sqr(t1.y)-sqr(t3.y);
m1:=2*(t1.y-t3.y);
m2:=2*(t1.x-t3.x);
a:=k2*m0-k0*m2;
b:=k2*m1-k1*m2;
if b=0 then exit;
y:=a/b;
ok.o.y:=y;
if abs(m2) > e then x:=(m0-y*m1)/m2
else
  if abs(k2) > e then x:=(k0-y*k1)/k2
  else exit;
ok.o.x:=x;
ok.r:=sqrt(sqr(t1.x-x)+sqr(t1.y-y));
end;
{определение принадлежности точки окружности}
function Prin(a:Point;ok:Okruz):boolean;
begin
if (sqr(a.x-ok.o.x)+sqr(a.y-ok.o.y))-sqr(ok.r)<-e then Prin:=true
else Prin:=false
end;
 
var t:MassP;
    ok:Okruz;
    n,i,j,k,l,k1,k2,mn,vn,nr:integer;
    r,x,y:real;
begin
randomize;
Tochki(t,n);
mn:=n;
r:=0;
x:=0;
y:=0;
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:=j+1 to n do
 begin
  Okr(t[i],t[j],t[k],ok);
  k1:=0;k2:=0;
  for l:=1 to n do
  if Prin(t[l],ok)then k1:=k1+1 {считаем внутри}
  else k2:=k2+1;{снаружи}
  if abs(k1-k2)<mn then{если разность меньше, запоминаем все параметры}
   begin
    mn:=abs(k1-k2);
    r:=ok.r;
    x:=ok.o.x;
    y:=ok.o.y;
    vn:=k1;
    nr:=k2-3;
   end;
 end;
writeln('Окружность: координаты центра x0=',x:0:2,' Y0=',y:0:2,' R=',r:0:2);
writeln('Внутри точек=',vn,' снаружи=',nr);
end.
этот код в чистом виде для данной задачи не подходит, разумеется, он другую задачу решает.
НО! Но оттуда можно надёргать много полезного!

Последний раз редактировалось Serge_Bliznykov; 16.12.2015 в 17:37.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 21:42   #6
artiom4356
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 78
По умолчанию

Может это конечно малость не по теме но не подскажите как указатель на массив сделать? Не динамическое выделение памяти а именно уже существующий. А лучше ещё и пример как его передавать и принимать из функции. Препод требует а я с адресной арефметекой так себе дружу.
Помочь!=Сделать за тебя
artiom4356 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
даны два множества точек на плоскости. Выбрать четыре... ezhikla C++ Builder 2 26.03.2014 18:50
Даны два множества точек на плоскости.Язык С++. RG21 Помощь студентам 0 17.05.2013 18:56
Программа. Даны 2 множества точек на плоскости - найти те три, которые образуют нужный треугольник ( C++ ) anya4363 Помощь студентам 0 06.02.2012 13:44
дано два множества точек.Найти пересечение и разность этих множеств.Координаты точек X и Y вводить с клав Degster Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2011 18:32
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50