0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 29
1

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

30.05.2014, 05:11. Показов 4538. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2014, 05:11
Ответы с готовыми решениями:

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

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

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

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

1
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 43
30.05.2014, 08:10 2
(Как вариант)Тебе нужно ещё где-то запоминать центр при минимальном радиусе, ты ведь из всех полученных радиусов выбираешь только один.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2014, 08:10
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru