Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.74
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:22     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #1
Надо написать программу на СИ, определяюшую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек на плоскости и содержащей внутри наибольшее количество точек этого множества. Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 15:22     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Посмотрите здесь:

C++ Из заданного на плоскости множества точек выбрать три различные точки
Найдите центр и радиус окружности, проходящей через три заданные точки на плоскости. C++
C++ Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек)
Работа С Массивами (Выбрать три различные точки из заданного множества точек на плоскости так...) C++
C++ Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.06.2011, 15:26     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #2
задача специфическая, и там где вы учитесь наверняка решали подобные задачи, представте нам свои соображения
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:32  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #3
К сожалению, ничего подобного мы не решали((( знаю только, что по этим трем точкам нужен треугольник, надо провести серединные перпендикуляры, провести окружность и определить радиус и центр...про остальное вообще не знаю...

я не представляю как это реализовать в программе...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 15:46     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #4
втупую перебери все окружности, проходящие через три точки, другого способа скорее всего и нету
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:56  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #5
а кто-нибудь может написать эту программу?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 15:59     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #6
да наверно много кто может, только зачем?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:01  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #7
Мне это очень необходимо, сама я не могу написать ее... Надеюсь, что мне кто-нибудь поможет...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 16:18     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #8
Цитата Сообщение от Protected_fleur Посмотреть сообщение
сама я не могу написать ее
по какой причине? если не знаешь языка то иди во фриланс
если знаешь то начни, а дальше посмотрим, говори чё именно не понятно, если это не касается синтаксиса С или аналитической геометрии
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
29.06.2011, 17:23     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #9
Программа вычисляющая координаты центра и радиус окружности, описанной вокруг треугольника. Проверки треугольника на нулевую площадь нет. Формулы получены гибридизацией английской и русской страниц википедии.
C++
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
// представление результата сруктурой с инициализатором
struct circle
{
    double x;
    double y;
    double r;
    circle() : x(0), y(0), r(0) {}
    circle(double x0, double y0, double radius) : x(x0), y(y0), r(radius) {}
};
 
// вспомогательная функция, определитель специального вида
inline
static double det(
        double a1, double b1, double c1,
        double a2, double b2, double c2 )
{
    double d  = (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2;
    d -= (a1*a1+a2*a2)*c2 + (b1*b1+b2*b2)*a2 + (c1*c1+c2*c2)*b2;
    return d;
}
 
// длина отрезка
inline
static double norm(double x1, double y1, double x2, double y2)
{
    double x = x1 - x2;
    double y = y1 - y2;
    return sqrt(x*x+y*y);
}
 
// вычисление описанной окружности
circle circumscr<F12>ibed(
        double x1, double y1,
        double x2, double y2,
        double x3, double y3 )
{
    double a = norm(x1, y1, x2, y2);
    double b = norm(x1, y1, x3, y3);
    double c = norm(x3, y3, x2, y2);
    double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    double r = a*b*c*fabs(Dinv);
    double x0 =  Dinv*det(x1, x2, x3, y1, y2, y3);
    double y0 = -Dinv*det(y1, y2, y3, x1, x2, x3);
    return circle(x0, y0, r);
}
 
int main()
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
 
    cout << "Input x1 y1 x2 y2 x3 y3: ";
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
 
    circle c = circumscribed(x1, y1, x2, y2, x3, y3);
    cout << "Center: (" << c.x << ", " << c.y << ")\n";
    cout << "Radius: " << c.r << endl;
 
    return 0;
}
Ещё что-то есть здесь: Окружности и треугольник!. Не проверял.

Ну а перебор, это уж пусть кто-то другой. Или сама
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:10  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #10
Спасибо большое))) попробую теперь разобраться и дописать)))

Добавлено через 28 минут
Жаль, что не на СИ...
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
29.06.2011, 20:16     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #11
Чёрт, когда это <F12> пролезла в название функции?
Ну а сами функции вычислительные практически на Си, отличий не много там. Но раз уж ошибка вкралась, то вот на Си вариант.
C
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
#include <stdio.h>
#include <math.h>
 
// представление результата сруктурой
typedef struct CIRCLE
{
    double x;
    double y;
    double r;
} circle;
 
// вспомогательная функция, определитель специального вида
inline
static double det(
        double a1, double b1, double c1,
        double a2, double b2, double c2 )
{
    double d  = (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2;
    d -= (a1*a1+a2*a2)*c2 + (b1*b1+b2*b2)*a2 + (c1*c1+c2*c2)*b2;
    return d;
}
 
// длина отрезка
inline
static double norm(double x1, double y1, double x2, double y2)
{
    double x = x1 - x2;
    double y = y1 - y2;
    return sqrt(x*x+y*y);
}
 
// вычисление описанной окружности
circle circumscribed(
        double x1, double y1,
        double x2, double y2,
        double x3, double y3 )
{
    circle crcl;
    double a = norm(x1, y1, x2, y2);
    double b = norm(x1, y1, x3, y3);
    double c = norm(x3, y3, x2, y2);
    double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    crcl.r = a*b*c*fabs(Dinv);
    crcl.x =  Dinv*det(x1, x2, x3, y1, y2, y3);
    crcl.y = -Dinv*det(y1, y2, y3, x1, x2, x3);
    return crcl;
}
 
int main()
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
    circle c;
 
    printf("Input x1 y1 x2 y2 x3 y3: ");
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
 
    c = circumscribed(x1, y1, x2, y2, x3, y3);
    printf("Center: (%g, %g)\n", c.x, c.y);
    printf("Radius: %g\n", c.r);
 
    return 0;
}
Добавлено через 54 секунды
Да, inline для Си тоже может стать неожиданностью. Тогда их просто убрать надо будет.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 20:59  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #12
блин((( что-то у меня после ввода точек вылетает...
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
29.06.2011, 22:06     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #13
Вылетает, или закрывается?
создаю исполняемый файл запускаю окно появляется на доли секунды и изчезает
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
30.06.2011, 05:40     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #14
Добавь внизу функции main()
system("pause");
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
01.07.2011, 14:04     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #15
Вместо моей функции norm можно использовать стандартную hypot. Вот блин, память подвела, пришлось велосипед изобретать.
Как же я про тебя забыл? Ⓒ
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
01.07.2011, 18:05  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #16
хм...
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 16:42  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #17
А кто-нибудь может переложить этот текст с Pascal на СИ или хотя бы на C++ ???
Pascal
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
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.
Добавлено через 1 минуту
Я Pascal, к сожалению, вообще не знаю...
Помогите пожалуйста!
Nursik77
 Аватар для Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
02.07.2011, 17:41     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #18
Protected_fleur, а что верхний вариант не подходит?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 17:45  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #19
нет, не подходит...там многого нет и кое-что надо переделать...нужно выбирать три точки из заданного множества и строить по ним окружность, причем такую, чтоб внутри нее оказалось максимальное число точек этого множества! задача на паскале подходит...но переделать на си ее не могу((((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 17:50     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
02.07.2011, 17:50     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #20
Цитата Сообщение от Protected_fleur Посмотреть сообщение
задача на паскале подходит...
Возможно я при переводе в sage где-то и ошибся, но вряд ли. В общем есть у меня сомнения, что функция Okr правильно определяет центр окружности.

Цитата Сообщение от Protected_fleur Посмотреть сообщение
но переделать на си ее не могу((((
Да ладно, они ж близнецы практически, что си, что паскаль
Вместо ":=" пишем "=", вместо "=" пишем "==", вместо sqr - квадрат... Где там проблемы-то? Математика, он и в Африке математика.
Yandex
Объявления
02.07.2011, 17:50     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Ответ Создать тему

Метки
описанная окружность
Опции темы

Текущее время: 00:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru