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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SKED
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 14
#1

Найти координаты центра окружности - C++

30.05.2014, 05:11. Просмотров 467. Ответов 1
Метки нет (Все метки)

Всем привет.
По условию дано множество точек на плоскости. Нужна программа, которая бы находила такие 3 точки, радиус описанной окружности вокруг которой был бы минимален. Т.е. на выходе должно быть значение радиуса, а также центра этой окружности.

Для нахождения радиуса использовалась формула:
Найти координаты центра окружности
Приблизительные координаты центра находятся по формуле:
Xс = (Х1+Х2+Х3) / 3
Yс = (Y1+Y2+Y3) / 3

В общем, радиус получается найти, а те единственные значения координат центра (x0=1, y0=0,67) - нет.
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
#include "stdafx.h"
#include <iostream>
 
const int N=6;
struct TPoint {
    double x, y;
};
 
struct TPoint PS[N]={{0,0},{2,0},{4,1},{4,3},{2,5},{1,2}};
double Dist(TPoint a, TPoint b, TPoint c);
double MinDist(void);
 
int main() {
    double RMin;
    RMin=MinDist();
    printf("R=%6.2f\n", RMin );
    system("pause");
}
 
double Dist(TPoint a, TPoint b, TPoint c){
    double R, x0, y0;
    R=(sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)))*     /*длина стороны 1 треугольника*/
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)))*       /*длина стороны 2 треугольника*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y)))/       /*длина стороны 3 треугольника*/
 
    (sqrt((8*((sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)))+ /*восемь*/
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)))+           /*умноженное на*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y))))*          /*периметр треугольника*/
    
    (((sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)))+    /*полупериметр*/
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)))+      /*минус*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y))))/2-   /*сторона*/ 
    (sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))))*     /*1*/
 
    (((sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)))+    /*полупериметр*/
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)))+      /*минус*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y))))/2-   /*сторона*/ 
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y))))*     /*2*/
 
    (((sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)))+    /*полупериметр*/
    (sqrt((a.x-c.x)*(a.x-c.x)+(a.y-c.y)*(a.y-c.y)))+      /*минус*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y))))/2-   /*сторона*/
    (sqrt((c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y)))))));  /*3*/
    x0=(a.x+b.x+c.x)/3;
    y0=(a.y+b.y+c.y)/3;
    printf("x0=%6.2f y0=%6.2f\n", x0, y0);
    return R;
}
double MinDist(void) {
    int i, j, k;
    double r, RMin;
    RMin=Dist(PS[0],PS[1],PS[2]);
    for (i=0;i<N-2;i++)
        for (j=i+1;j<N-1;j++)
            for (k=i+2; k<N; k++){
            r=Dist(PS[i],PS[j],PS[k]);
            if (r<RMin) {
                RMin=r;
            }
        }
    return RMin;
}
Найти координаты центра окружности

Что-то картинки не вставляются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 05:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти координаты центра окружности (C++):

Найти и вывести координаты центра окружности - C++
Друзья, нужна помощь. Девушке задали лабы по СИ, она не шарит. Знакомых всех спросил, никто не может помочь. Вот она: 1. Диаметр...

Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) - C++
Даны координаты центра (xc,yc) и радиус R окружности, координаты точки (x,y) вне окружности. Найти точку пересечения одной из касательных с...

По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат. - C++
По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.

Зачем в задании "найти длину окружности" помимо радиуса даны еще координаты центра? - C++
Всем привет дали задачку 19. Даны координаты центров двух окружностей, а также их радиусы. Определить их длины. Немного погуглив...

Найти координаты центра и радиус сферы, которая охватывает все заданные точки - C++
Люди добрые помогите и спасите)) не шарю как написать проги. Может кто сможет помочь Номер 1. Задано квадратную матрицу А порядка n....

Найти координаты точек пересечения прямой и окружности - C++
Найти координаты точек пересечения прямой y=kx+b и окружности радиуса R с центром в начале координат. В каких координатных четвертях...

1
MashaM20
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 43
30.05.2014, 08:10 #2
(Как вариант)Тебе нужно ещё где-то запоминать центр при минимальном радиусе, ты ведь из всех полученных радиусов выбираешь только один.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 08:10
Привет! Вот еще темы с ответами:

Как найти координаты точки соответствующей заданному градусу окружности? - C++
Т.е градус 180 соответствует самой нижней точке окружности и его координаты: x=центр окр, y=центр окр+радиус. С помощью какой формулы можно...

Найти координаты точек пересечения окружности с экспонентой и сформировать из них множество А - C++
С клавиатуры вводится радиус окружности с центром в начале координат. Найти координаты точек пересечения окружности с экспонентой и...

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

Получить координаты центра тяжести системы, а также расстояние от центра тяжести до всех точек системы - C++
Здравствуйте, помогите пожалуйста с решением задачи!!! Система из 25 материальных точек в пространстве задана с помощью последовательности...


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

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

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