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

Найти отрезок, лежащий целиком в наибольшем количестве окружностей - C++

Восстановить пароль Регистрация
 
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 7
06.07.2016, 17:59     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #1
Дано множество окружностей. Найти отрезок, концами которого являются точки из множества Т и который лежит целиком в наибольшем количестве окружностей.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2016, 17:59     Найти отрезок, лежащий целиком в наибольшем количестве окружностей
Посмотрите здесь:

C++ Найти отрезок в массиве.
Найти отрезок максимальной длины в массиве А C++
C++ Найти max элемент массива 4 х 4, лежащий выше главной диагонали
C++ Даны координаты центров n окружностей и их радиусы. Определить число пересекающихся окружностей
C++ Матрицы.Найти, сколько отрицательных элементов содержит данная матрица в каждом столбце,а также максимальный элемент,лежащий на главной диагонали
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ura_111
13 / 15 / 5
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 18:53     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #2
Ты хочешь что бы за тебя сделали? Или готов подключится к работе?
Твоё знания С++ какое?
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 7
06.07.2016, 19:12  [ТС]     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #3
Да нужен код программы. Если что готов подключится к работе
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 238
06.07.2016, 19:19     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #4
Цитата Сообщение от Anvar_Ibragimov Посмотреть сообщение
Если что готов подключится к работе
Ну так начинай
ura_111
13 / 15 / 5
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 19:24     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #5
Хорошо. Для начала нарисуй (можешь в Paint, можешь от руки) как ты понимаешь задание.
Кстате ты не ответил о твоём уровне С++.
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 7
06.07.2016, 19:43  [ТС]     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct point
{ float x;
  float y; };
 
struct okr
{ point c;
  float r; };
 
struct otr
{ point a;
  point b; };
 
otr  *o
okr *e
 
float dlin(float x1, float x2, float y1, float y2)
{return (sqrt((x1-x2), 2) + sqrt((y1-y2), 2));}
 
for( i=0;i<n;n++){
for( k=0;k<m;m++){
for( j=k+1;j<n;j++){
 
if ((dlin(e[i].centr,o[j])<e[i].r) && dlin(e[i].centr,o[j])<e[i].r) // условие нахождения отрезка в окружности
это все очень примерно )
ura_111
13 / 15 / 5
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 19:56     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #7
Обьясни мне что такое множество Т (массив int)? Окружности пересекаются? Концы отрезка - это просто все комбинации перебрать из Т? Как задаются окружности? Вы учили динамическое распределение памяти?

Посмотри пример, что там что:

[IMG]http://www.****************/images/54592_11.jpg[/IMG]
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 7
06.07.2016, 22:04  [ТС]     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #8
Т массив данных для отрезков как и для окружностей которые мы вводим
Окружности могут быть любыми и пересекаться тоже могут
Перебегаем все точки подряд
Окружности задаются через
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2016, 02:26     Найти отрезок, лежащий целиком в наибольшем количестве окружностей
Еще ссылки по теме:

C++ Для матрицы M[5][5] найти минимальный элемент лежащий выше побочной диагонали
C++ Найти наибольший отрезок из совершенных чисел
Найти точку соприкосновения двух окружностей C++

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

Или воспользуйтесь поиском по форуму:
ura_111
13 / 15 / 5
Регистрация: 21.05.2016
Сообщений: 48
07.07.2016, 02:26     Найти отрезок, лежащий целиком в наибольшем количестве окружностей #9
Прежде чем анализировать мою программу познакомится с теорией пересечения прямой и окружности (ведь тебе придется тестировать и в случае необходимости поправлять программу):

Окружность и прямая

Перебор прямых вот так осуществляется:



Результат работа программы:






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
#include <iostream>
#include <math.h>
#include <ctime>    // Для случайно генерирования чисел
#include <iomanip>  // Для случайно генерирования чисел
using namespace std;
 
bool PERESECHENIE(int x1, int y1, int x2, int y2, int x0, int y0, double r);
 
struct POINT
{
    int x;
    int y;
};
 
struct OKR
{
    int x;
    int y;
    double r;
};
 
int main()
{
    int N_okr, N_T;
    int S, max = 0;
 
    cout << "Vvetite kol-vo okruchnostei: ";
    cin >> N_okr;
    cout << "Vvetite kol-vo elementov T: ";
    cin >> N_T;
 
    OKR *okr = new OKR[N_okr];  // Выделение памяти под массив окружностей
    POINT *T = new POINT[N_T];  // Выделение памяти под массив точек Т
 
    srand(time(0));
 
    cout << "\nOkruchnosti:";
    cout << "\n  X   Y   R\n";
    for (int i = 0; i < N_okr; i++)  // Заполнение случайно массив окружностей (у нас поле 100*100)
    {
        okr[i].x = rand() % 100;
        okr[i].y = rand() % 100;
        okr[i].r = rand() % 100;    
        cout << setw(3) << okr[i].x << setw(4) << okr[i].y << setw(4) << okr[i].r << endl;
    }
 
    cout << "\nMassiv T:";
    cout << "\n  X   Y\n";
    for (int i = 0; i < N_T; i++)  // Заполнение случайно массив Т (у нас поле 100*100)
    {
        T[i].x = rand() % 100;
        T[i].y = rand() % 100;
        cout << setw(3) << T[i].x << setw(4) << T[i].y << endl;
    }
    
    cout << "\nKol-vo peresechenui:";
    cout << "\n Tochka1   Tochka2  Kol peresech\n";
    for (int i = 0; i < N_T; i++)          // Индекс массива T[i] для 1-й точки 
    {
        for (int j = i + 1; j < N_T; j++)  // Индекс массива T[i] для 2-й точки 
        {
            S = 0;
            for (int k = 0; k < N_okr; k++) // Перебор всех окружностей 
            {
                if (PERESECHENIE(T[i].x, T[i].y, T[j].x, T[j].x, okr[k].x, okr[k].y, okr[k].r) == true)
                {
                    S = S + 1;
                }               
            }
            cout << setw(2) << "(" << setw(2) << T[i].x << "," << setw(2) << T[i].y << ")" << setw(4) << "(" << setw(2) << T[j].x << "," << setw(2) << T[j].y << ") " << setw(7) << S << endl;
            if (max < S)
            {
                max = S;
            }
        }
    }
    
    cout << "\nMax peresechenui: " << max << endl;
    
    cout << "\n Tochka1   Tochka2  Kol peresech\n";
    for (int i = 0; i < N_T; i++)          // Индекс массива T[i] для 1-й точки 
    {
        for (int j = i + 1; j < N_T; j++)  // Индекс массива T[i] для 2-й точки 
        {
            S = 0;
            for (int k = 0; k < N_okr; k++) // Перебор всех окружностей 
            {
                if (PERESECHENIE(T[i].x, T[i].y, T[j].x, T[j].x, okr[k].x, okr[k].y, okr[k].r) == true)
                {
                    S = S + 1;
                }
            }
            if (S == max)
            {
                cout << setw(2) << "(" << setw(2) << T[i].x << "," << setw(2) << T[i].y << ")" << setw(4) << "(" << setw(2) << T[j].x << "," << setw(2) << T[j].y << ") " << setw(7) << S << endl;
            }
        }
    }
 
    cout << "\n";
    delete[] okr;
    delete[] T;
    system("pause");
    return 0;
}
 
bool PERESECHENIE(int x1, int y1, int x2, int y2, int x0, int y0, double r)
{
    double k = (y2 - y1) / (x2 - x1);
    double b = (y2*x1 - y1*x2) / (x1 - x2);
    b += (k*x0 - y0);
    double D = pow(2 * b*k, 2) + 4 * (1 + pow(k, 2))*(pow(r, 2) - pow(b, 2));
    if (0 <= D) // Если дискременант положителен, то прямая пересекается с окружностью
    {
        return true;
    }
    return false;
}

Протестируй программу, "сравни с расчетом в ручную".

Добавлено через 25 минут
А и ещё. Посмотри на текст программы и скажи, что Вы учили, что нет. Может нужно упростить или наоборот усложнить программу.
Yandex
Объявления
07.07.2016, 02:26     Найти отрезок, лежащий целиком в наибольшем количестве окружностей
Ответ Создать тему
Опции темы

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