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

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

Восстановить пароль Регистрация
 
SKED
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 13
30.05.2014, 05:11     Найти координаты центра окружности #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;
}
Найти координаты центра окружности

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

C++ найти координаты центра радиуса сферы
Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) C++
Найти координаты точек пересечения окружности с экспонентой и сформировать из них множество А C++
C++ По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.
Определить координаты центра консоли C++
C++ Формула центра описанной окружности
Найти координаты, лежащие на окружности, равноудаленные на заданный угол друг от друга C++
C++ Зачем в задании "найти длину окружности" помимо радиуса даны еще координаты центра?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MashaM20
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 43
30.05.2014, 08:10     Найти координаты центра окружности #2
(Как вариант)Тебе нужно ещё где-то запоминать центр при минимальном радиусе, ты ведь из всех полученных радиусов выбираешь только один.
Yandex
Объявления
30.05.2014, 08:10     Найти координаты центра окружности
Ответ Создать тему
Опции темы

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