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

Геометрия в С++. - C++

Восстановить пароль Регистрация
 
Lаmer
7 / 7 / 4
Регистрация: 24.03.2010
Сообщений: 25
24.03.2010, 22:20     Геометрия в С++. #1
Здравствуйте. Помогите решить задчу: "Даны два множества точек на плоскости. Найти радиус и центр окружности, проходящей через n (n>=3) точек первого множества и содержащей строго внутри себя равное число точек первого и второго множеств". (Без графического режима).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2010, 22:20     Геометрия в С++.
Посмотрите здесь:

C++ геометрия
1) массивы 2)геометрия C++
Геометрия(треугольник) C++
Вычислительная геометрия на С C++
C++ Геометрия и графика
C++ Геометрия
C++ геометрия
Простая геометрия C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lаmer
7 / 7 / 4
Регистрация: 24.03.2010
Сообщений: 25
10.04.2010, 23:42  [ТС]     Геометрия в С++. #2
В задании опечатка не "n>=3", а "n = 3".

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
 
struct Spaces
{
    double x1;
    double x2;
    double y1;
    double y2;
};
 
inline void Fil(struct Spaces* spaces, size_t m);
inline void Out(struct Spaces* spaces, size_t m);
void GeoAnalyse(struct Spaces* spaces, size_t m);
 
int main(void)
{
    setlocale(0, "");
    size_t n;
    std::cout << "Введите размерность множеств -> ";
    std::cin >> n;
    Spaces *spaces = new Spaces[n];
    if(spaces)
    {
        std::cout << "Память выделена успешно: " << "spaces[0] = " << &spaces[0];
        std::cout << std::endl;
    }
    else 
    {
        std::cout << "Невозможно выделить память. Дальнейшая работа программы невозможна\n";
        abort();
    }
    Fil(spaces, n);
    Out(spaces, n);
    GeoAnalyse(spaces, n);
    delete[] spaces;
    system("pause");
    return 0;   
}
 
void Fil(struct Spaces* spaces, size_t m)
{
    srand(time(NULL));
    for(size_t i = 0; i < m; ++i)
    {
        spaces[i].x1 = rand()%301 - 101;
        spaces[i].y1 = rand()%301 - 101;
        spaces[i].x2 = rand()%301 - 101;
        spaces[i].y2 = rand()%301 - 101;
    }
}
 
void Out(struct Spaces* spaces, size_t m)
{
    std::cout << "\nТекущее состояние множеств:\n";
    for(size_t i = 0; i < m; ++i)
    {
        std::cout << spaces[i].x1 << '\t';
        std::cout << spaces[i].y1 << '\t';
        std::cout << spaces[i].x1 << '\t';
        std::cout << spaces[i].y1 << '\t';
    }
}
 
void GeoAnalyse(struct Spaces *spaces, size_t m)
{
    double a;
    double b;
    double c;
    double ax;
    double ay;
    double bx;
    double by;
    double cx;
    double cy;
    size_t i;
    for(i = 0; i < 2 * m; ++i)
    {
        a = sqrt(pow(spaces[i + 1].x1 - spaces[i].x1, 2)        
            + pow(spaces[i + 1].y1 - spaces[i].y1, 2));
        b = sqrt(pow(spaces[i + 2].x1 - spaces[i + 1].x1, 2) 
            + pow(spaces[i + 2].y1 - spaces[i + 1].y1, 2));
        c = sqrt(pow(spaces[i + 2].x1 - spaces[i].x1, 2) 
            + pow(spaces[i + 2].y1 - spaces[i].y1, 2));     
        if((a < (b + c)) || (b < (c + a)))
        {
            ax = spaces[i].x1;
            ay = spaces[i].y1;
            bx = spaces[i + 1].x1;
            by = spaces[i + 1].y1;
            cx = spaces[i + 2].x1;
            cy = spaces[i + 2].y1;
            std::cout << "\nВыявлены опорные точки окружности: ";
            std::cout << "A(" << ax << ", " << ay << "), ";
            std::cout << "B(" << bx << ", " << by << "), ";
            std::cout << "С(" << cx << ", " << cy << ")\n";
            break;
        }
    }
    double p = (a + b + c)/2.0;
    double ar = sqrt(p * (p - a) * (p - b) * (p - c));
    double preax = pow(ax, 2);
    double preay = pow(ay, 2);
    double prebx = pow(bx, 2);
    double preby = pow(by, 2);
    double precx = pow(cx, 2);
    double precy = pow(cy, 2);
    double xCentre = (-(1.0)/(4 * ar)) * (bx * (precx + precy) - cx * (prebx + preby)
                       - (ax * (precx - precy) - cx * (preax - preay) + ax * (prebx + preby)
                               - (bx * (preax + preay))));
    double yCentre = (1.0/(4 * ar)) * (by * (precx + precy) - cy * (prebx + preby)
                       - (ay * (precx - precy) - cy * (preax - preay) + ay * (prebx + preby)
                               - (by * (preax + preay))));
    std::cout << "Выявлен центр окружности: O(" << xCentre << ", " << yCentre << ")\n";
    double rad = (a * b * c)/ar;
    size_t iter = 0;
    std::cout << "Выявлен радиус окружности: " << rad << '\n';
    std::cout << std::endl;
    std::cout << "Выявлены несколько точек 1-го и 2-го множеств, охватываемых окружностью: \n";
    for(i = 0; i < 4 * m; ++i)
    {
        if((sqrt((pow((spaces[i].x1 - xCentre), 2)) + (pow((spaces[i].y1 - yCentre), 2))) < rad) 
            && (sqrt((pow((spaces[i].x2 - xCentre), 2)) + (pow((spaces[i].y2 - yCentre), 2))) < rad))
        {
            std::cout << "точка с координатами \t(" << spaces[i].x1 << ", " << spaces[i].y1 
                << ")\t принадлежит 1-му множеству\n";
            std::cout << "точка с координатами \t(" << spaces[i].x2 << ", " << spaces[i].y2
                << ")\t принадлежит 2-му множеству\n";
            ++iter;
        }
        if(iter > 3) 
            break;
    }
    std::cout << std::endl;
}
Yandex
Объявления
10.04.2010, 23:42     Геометрия в С++.
Ответ Создать тему
Опции темы

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