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

С++, круг минимального радиуса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать регистрацию игроков к игре крестики-нолики http://www.cyberforum.ru/cpp-beginners/thread145388.html
Здраствуйте!!! У меня возникла проблема при написании игры "Хрестики нулики" как мне в коде написать регистрацию игроков вот полное условие задачи: Разработать игровую программу Крестики нулики. Предусмотреть регистрацию игроков с учетом количества игр и побед. Данные об игроках с учетом количества игр и побед. Данные об игроках и их победах хранить в файле. Предусмотреть выведение данных из...
C++ Строки Всем привет! Завтра у меня зачет по программированию и мне нужно решить 3 задачи на тему строки. Помогите пожалуйста: 1) Дано предложение. Найти самое короткое слово нечетной длины. 2) Дано предложение. Подсчитать количество слов-перевертышей. 3) Дано предложение. В словах четной длины удалить каждую вторую букву. P.S. Писать на turbo c++ и желательно чтоб было понятно для первокурсника.... http://www.cyberforum.ru/cpp-beginners/thread145384.html
C++ protected и его назначение
Не понятно назначение ключевого слова протектед, хотя пишут что он нужен для класса-потомка, только зачем? Вот код, растолкуйте на нём ,что даёт протектед, заранее благодарю. #include <iostream> using namespace std; class Aria{ public: int a; protected: int p; public: void z(){cout<<"1";}
Создать динамический массив указателей C++
Создать динамический массив указателей для сохранения двумерного массива А в динамической памяти. Составить программу для подсчета произведения элементов в двумерной таблице А размеру mХn., которые удовлетворяют условию -3<=Aij<=3. Подсчет произведения организовать в отдельной функции.
C++ Отображение полного вида числа http://www.cyberforum.ru/cpp-beginners/thread145349.html
Всем доброго времени суток, есть такая вещь в консольных приложениях С++, что на выводе отображается число польностью, только если в нем до 6 знаков, если знаков больше, то выводится что-то типо 3,6288e+006, т.е. дробь, умноженная на 10 в n-й степени, вопрос - как сделать чтобы число отображалось полностью? Заранее спасибо.
C++ Можно ли так записать? можно ли записать как то ЕСЛИ N ДЕЛИТСЯ НА ТРИ ТО ДЕЛИТЬ N на 3 подробнее

Показать сообщение отдельно
rrrFer
Заблокирован
15.06.2010, 02:29     С++, круг минимального радиуса
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
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
/**/
#include <iostream.h>
/**/
#include <stdlib.h>
#include <math.h>
/**/
void form_mas(float a[2][100],int &n){
    int i,j;
    //randomize();
    for(i=0;i<n;i++){
        cout<<"x["<<i<<"]: ";
        cin>>a[0][i];
        cout<<"y["<<i<<"]: ";
        cin>>a[1][i];
        //a[i][j]=random(10)-5;
    }
}
int getCircleParametrs(float x1,float y1,float x2,float y2, float x3, float y3, float &R, float &CX, float &CY){
    float ma,mb,t;
    //защита от бесконечного угла наклона
    if(y1==y2&&y2==y3||x1==x2&&x2==x3){
        R=CX=CY=0;
        return 0;
    }
    if(y1==y2){
        t=x2;
        x2=x3;
        x3=t;
        t=y2;
        y2=y3;
        y3=t;
    }
    if(y2==y3){
        t=x2;
        x2=x1;
        x1=t;
        t=y2;
        y2=y1;
        y1=t;
    }
    //тангенс угла наклона
    ma=(y2-y1)/(x2-x1);
    mb=(y3-y2)/(x3-x2);
    //центр
    CX=(ma*mb*(y1-y3)+mb*(x1+x2)-ma*(x2+x3))/(2*(mb-ma));
    CY=-(1./ma)*(CX-(x1+x2)/2.)+(y1+y2)/2.;
    R=sqrt(fabs(CX-x1)*fabs(CX-x1)+fabs(CY-y1)*fabs(CY-y1));
    return 1;
}
int inPointEnter(float x1,float y1, float CX, float CY, float R){
    float RR;
    RR=sqrt(fabs(CX-x1)*fabs(CX-x1)+fabs(CY-y1)*fabs(CY-y1));
    return RR<R;
}
int getPoints(float a[2][100],int &n1,float b[2][100],int &n2,float &x1,float &y1,
float &x2, float &y2, float &x3, float &y3, float &minS){
    float t,R,CX,CY,i,j,k,v;
    int validMinS;
    for(i=0,validMinS=0;i<n1;i++)
        for(j=i+1;j<n1;j++)
            for(k=j+1;k<n1;k++)
                if(getCircleParametrs(a[0][i],a[1][i],a[0][j],a[1][j],
                a[0][k],a[1][k],R,CX,CY)){
                    for(v=0;v<n2;v++)
                        if(!inPointEnter(b[0][v],b[1][v],CX,CY,R))
                            break;
                    if(v==n2)
                        //эти 3 точки подходят
                        if(!validMinS||minS>3.14*R*R){
                            validMinS=1;
                            minS=3.14*R*R;
                            x1=a[0][i],y1=a[1][i];
                            x2=a[0][j],y2=a[1][j];
                            x3=a[0][k],y3=a[1][k];
                        }
                }
    return validMinS;
}
int main(){
    const int N=100;
    int n1,n2,fl;
    float a[2][N],b[2][N],x1,x2,x3,y1,y2,y3,s;
 
    cout<<"n1: ";
    cin>>n1;
    form_mas(a,n1);
 
    cout<<"n2: ";
    cin>>n2;
    form_mas(b,n2);
 
    /*
    n1=n2=3;
    a[0][0]=5;
    a[1][0]=5;
    a[0][1]=15;
    a[1][1]=20;
    a[0][2]=25;
    a[1][2]=5;
    b[0][0]=10;
    b[1][0]=10;
    b[0][1]=15;
    b[1][1]=15;
    b[0][2]=20;
    b[1][2]=10;
    */
    fl=getPoints(a,n1,b,n2,x1,y1,x2,y2,x3,y3,s);
    if(!fl){
        cout<<"no appropriate points"<<endl;
        return 0;
    }
    cout<<"x1: "<<x1<<" y1: "<<y1<<endl;
    cout<<"x2: "<<x2<<" y2: "<<y2<<endl;
    cout<<"x3: "<<x3<<" y3: "<<y3<<endl;
    cout<<"S: "<<s<<endl;
 
    cout<<"press <enter>: ";
    cin.get(),cin.get();
    return 0;
}
выбираем все комбинации из 3 точек, черех которые можно провести окружность, получаем радиус окружности. Возможна ошибка деления на ноль если прямая,проведенная между выбранными точками множества, будет паралельна оси ординат, поэтому если нашллись такие точки - то изменяется порядок обхода точек.

Добавлено через 4 минуты
и конечно надо проверять все ли точки входят в эту окружность, для этого проверяется на сколько удалена точка от центра окружности (сравниваем с радиусом)
 
Текущее время: 07:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru