Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 08.12.2013
Сообщений: 20
1

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

04.03.2014, 21:06. Показов 1914. Ответов 1
Метки нет (Все метки)

Помогите с программой
Условие:
На геометрической плоскости дано множество точек. Координаты точек хранятся в текстовом файле. В первой строке файла содержится количество точек. Во второй и последующих строках записаны координаты точки по оси Ох и Оу. Программа должна решить поставленную задачу и нарисовать на экране заданное множество точек и решение.
Задача:
Определить радиус и центр такой окружности, проходящей хотя бы через три точки множества точек, что минимальна разность по модулю количества точек, лежащих внутри и вне окружности.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 21:06
Ответы с готовыми решениями:

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

Определить радиус и центр такой окружности, проходящей
Здравствуйте. Помогите пожалуйста нужно реализовать на процедурах и функциях либо Delphi либо ...

В множество точек вписать окружность и определить центр окружности и радиус
Здравствуйте! Не направите или не подскажите как реализовать идею. Задача заключается в следующем....

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

1
Модератор
63400 / 47085 / 32454
Регистрация: 18.05.2008
Сообщений: 114,132
05.03.2014, 10:10 2
Лучший ответ Сообщение было отмечено arowbap как решение

Решение

Примерно так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
const e=0.001;
type
Point=record  //точка
      x,y:real;
      end;
Okruz=record //окружность
      o:Point;
      r:real;
    end;
MassP=array of Point; //массив точек
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
//создаем массив точек
procedure Tochki(var t:MassP;var n:integer);
var i:integer;
begin
setlength(t,n);
for i:=0 to n-1 do
 begin
  t[i].x:=-10+20*random;
  t[i].y:=-10+20*random;
 end;
end; 
//вычисление координат центра и радиуса окружности
//прходящей через три точки
procedure Okr(t1,t2,t3:Point;var o:Point;var r:real);
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;
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;
o.x:=x;
r:=sqrt(sqr(t1.x-x)+sqr(t1.y-y));
end;
//определение принадлежности точки окружности
function Prin(a,b:Point;c:real):integer;
begin
if abs(sqr(a.x-b.x)+sqr(a.y-b.y)-sqr(c))<e then result:=0//на окружности
else if sqr(a.x-b.x)+sqr(a.y-b.y)<sqr(c) then result:=1 //внутри окружности
else result:=-1//снаружи
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var n,i,j,k,m,xc,yc,min,kv,ks,vmn,smn:integer;
    t:MassP;
    o,mn:Point;
    ms,r,rmn:real;
begin
randomize;
n:=SpinEdit1.Value;
Image1.Width:=Image1.Height;
tochki(t,n);
xc:=Image1.Width div 2;
yc:=xc;
ms:=(xc-20)/10;
with Image1.Canvas do
 begin
 //рисуем оси
  moveto(0,yc);lineto(Image1.Width,yc);
  moveto(xc,0);lineto(xc,Image1.Height);
  textout(Image1.Width-10,yc-20,'X');
  textout(xc+5,0,'Y');
  for i:=1 to 10 do
   begin
    moveto(xc+round(i*ms),yc-3);lineto(xc+round(i*ms),yc+3);
    moveto(xc-round(i*ms),yc-3);lineto(xc-round(i*ms),yc+3);
    moveto(xc-3,yc-round(i*ms));lineto(xc+3,yc-round(i*ms));
    moveto(xc-3,yc+round(i*ms));lineto(xc+3,yc+round(i*ms));
    textout(xc+round(i*ms)-5,yc+15,inttostr(i));
    textout(xc-round(i*ms)-5,yc+15,inttostr(-i));
    textout(xc-20,yc-round(i*ms)-5,inttostr(i));
    textout(xc-25,yc+round(i*ms)-5,inttostr(-i));
   end;
 end;
//выбираем окружность
min:=n;
for i:=0 to n-3 do
for j:=i+1 to n-2 do
for k:=j+1 to n-1 do
 begin
  Okr(t[i],t[j],t[k],o,r); //вычислили праметры окружности
  kv:=0;
  ks:=0;
  for m:=0 to n-1 do //считаем точкм внутри и снаружи
  if Prin(t[m],o,r)=1 then inc(kv)
  else if Prin(t[m],o,r)=-1 then inc(ks);
  if abs(kv-ks)<min then//если модуль разности минимальный
   begin
    mn:=o; //запомним координаты центра
    rmn:=r; //радиус
    vmn:=kv; //кол. внутри
    smn:=ks  //снаружи
   end;
 end;
Memo1.Lines.Add('Окружность с координатами');
Memo1.Lines.Add('   ('+floattostrF(mn.x,ffFixed,6,2)+':'+floattostrF(mn.y,ffFixed,6,2)+')');
Memo1.Lines.Add('с радиусом '+floattostrF(rmn,ffFixed,6,2));
Memo1.Lines.Add('внутри точек='+inttostr(vmn)+' снаружи='+inttostr(smn));
with Image1.Canvas do
 begin
  //рисуем окружность
  pen.Color:=clRed;
  brush.Style:=bsClear;
  ellipse(xc+round(mn.x*ms)-round(rmn*ms),yc-round(mn.y*ms)-round(rmn*ms),
          xc+round(mn.x*ms)+round(rmn*ms),yc-round(mn.y*ms)+round(rmn*ms));
 //рисуем точки
  pen.Width:=2;
  //brush.Style:=bsSolid;
  for i:=0 to n-1 do
   begin
    if Prin(t[i],mn,rmn)=1 then pen.Color:=clLime //внутри
    else if Prin(t[i],mn,rmn)=-1 then pen.Color:=clBlue //снаружи
    else pen.Color:=clPurple; //на окружности
    ellipse(xc+round(t[i].x*ms)-3,yc-round(t[i].y*ms)-3,
    xc+round(t[i].x*ms)+3,yc-round(t[i].y*ms)+3)
   end;
 end;
end;
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2014, 10:10

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Определить радиус и центр такой окружности, проходящей хотя бы через три различные точки
Множество точек не должно превышать 100. Данные заполняются случайным образом. Результат решения...

Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Определить радиус и центр окружности, проходящей, по крайней мере, через три различные точки...

Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Надо написать программу на СИ, определяюшую радиус и центр окружности, проходящей по крайней мере...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.