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

Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 13:41     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #1
Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат.

а) Определить координаты центра, радиус, площадь и длину окружности круга минимального радиуса, который будет содер* жать внутри себя все заданные круги.


б) Рассматривая окружности попарно, определить координа* ты точек пересечения или точки касания для каждой пары, либо вывести сообщение об отсутствии общих точек.
Ребятки выручайте, я просто не знаю как делать прошу я в dev c++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 13:41     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат
Посмотрите здесь:

СИ:Определить структуры, описывающие точку в полярной и декартовой системах координат. C++
C++ Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора
C++ Как описать переменную в классе, тип которой заранее неизвестен?
C++ Определить месторасположение точки в декартовой системе координат
Определить месторасположение точки в декартовой системе координат (найдите ошибку) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 13:58     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #2
Marina92, ребятки только помогают, а не пишут программы за вас. Программы пишут фрилансеры. Выкладывайте ваш код, посмотрим, в чем ошибки
Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 14:00  [ТС]     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #3
Цитата Сообщение от Folko Посмотреть сообщение
Marina92, ребятки только помогают, а не пишут программы за вас. Программы пишут фрилансеры. Выкладывайте ваш код, посмотрим, в чем ошибки
у меня нету кода я не знаю как сделать вообще
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 14:02     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #4
Marina92,

Не по теме:

okay

Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 14:04  [ТС]     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #5
Цитата Сообщение от Folko Посмотреть сообщение
Marina92,

Не по теме:

okay

помоги пожалуйста
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 14:06     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #6
Marina92, ну ок. Для начала я так понимаю, в программу задаются координаты кругов? В виде координата центра+радиус?
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 14:07     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #7
Пару мыслей:
а) Минимальную окружность думаю можно определить рекуррсивно. Сперва для одной пары, затем беря полученную окружность и следущую. Так выйдем к общей окружности.
б)Достаточно ввести структуру вектор. Точка пересечения окружностей даст нам угол между радиусом к точке пересечения и прямой соеденяющей центры окружностей. Угол элементарно вычисляется по теореме косинусов. Затем зная угол наклона отрезка связующего центры и угол отклонения радиуса ведущего к точке пересечения окружностей определяем вектор который должен быть добавлен к координатам центра окружности для определения искомых точек пересечения.
Дерзайте
Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 14:07  [ТС]     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #8
Цитата Сообщение от Folko Посмотреть сообщение
Marina92, ну ок. Для начала я так понимаю, в программу задаются координаты кругов? В виде координата центра+радиус?
да
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 14:19     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #9
Marina92, я думаю. Не особо силен в линейной алгебре. Но пара мыслей есть. Делаем координаты для искомого круга и делаем их равными самой первой введенной окружности. Дальше надо как то попробовать перемещать координаты искомого с помощью вектора
Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 14:19  [ТС]     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #10
Цитата Сообщение от Folko Посмотреть сообщение
Marina92, я думаю. Не особо силен в линейной алгебре. Но пара мыслей есть. Делаем координаты для искомого круга и делаем их равными самой первой введенной окружности. Дальше надо как то попробовать перемещать координаты искомого с помощью вектора
Мне нужен код задачи, я не знаю как сделать
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
31.10.2013, 14:26     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #11
Marina92,

Не по теме:

а мне нужно 10.000 крон 5-эровыми монетками


Я вам без алгоритма написать не смогу программу. Пока что думаю, как, имея набор координат многоугольника, определить его центр
Marina92
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 6
31.10.2013, 14:52  [ТС]     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #12
помогите
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 15:56     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #13
Вот решение пункта а. Сейчас и остальное быстренько набрасаем...
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<cmath>
/**
 *  /Структура вектор
 */
struct vect
{
    float x0;
    float y0;
    vect(): x0(0), y0(0)
    {}
    vect(float x, float y): x0(x), y0(y)
    {}
};
 
/**
 *  /Структура круг
 */
struct krise
{
    vect center;
    float Radius;
    krise(): center(), Radius(0)
    {}
    krise(float x, float y, float R): center(x , y), Radius(R)
    {}
};
 
/**
 *  /Перегрузим операции, что бы легче было работать (аля ООП)
 */
vect operator+ (vect v1, vect v2)
{
    return vect(v1.x0 + v2.x0, v1.y0 + v2.y0);
}
vect operator- (vect v1, vect v2)
{
    return vect(v1.x0 - v2.x0, v1.y0 - v2.y0);
}
vect operator/ (vect v1, int number)
{
    return vect(v1.x0 / number, v1.y0 / number);
}
vect operator* (vect v1, float number)
{
    return vect(v1.x0 * number, v1.y0 * number);
}
 
/**
 *  /Вычисление модуля вектора
 */
float AbsVector(const vect v);
 
/**
 *  /Функция возвращает огибающий круг
 */
krise Find(const krise&, const krise&);
 
int main(int argc, char* argv[])
{
    system("chcp 1251>0");
 
    krise kris1(0, 0, 2);
    krise kris2(1, 0, 2);
    krise kr;
    kr = Find (kris1, kris2);
 
    std::cout << kr.Radius << std::endl;
    return 0;
}
krise Find(const krise& kr1, const krise& kr2)
{
    /**
    *  /Если один круг лежит внутри другого возвращаем внешний круг
    */
    if((kr1.Radius + AbsVector(kr1.center - kr2.center)) < kr2.Radius)
        return kr2;
    else if ((kr2.Radius + AbsVector(kr1.center - kr2.center)) < kr1.Radius)
        return kr1;
    /**
    *  /Ищем огибающий круг. Знание линейной алгебры поможет вам понять код
    */
    krise temp;
    temp.Radius = (kr1.Radius + kr2.Radius + AbsVector(kr1.center - kr2.center)) / 2;
    temp.center = (kr1.center + kr2.center) / 2 + vect((kr1.center.x0 - kr2.center.x0) / AbsVector(kr1.center - kr2.center), (kr1.center.y0 - kr2.center.y0) / AbsVector(kr1.center - kr2.center)) * (kr2.Radius - kr1.Radius);
    return temp;
}
float AbsVector(const vect v)
{
    return sqrt(pow(v.x0, 2) + pow(v.y0, 2));
}
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
31.10.2013, 16:35     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #14
Начало может быть таким:
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
#include <iostream>
#include <cmath>
 
struct point {
    double x;
    double y;
};
 
struct Krug {
    point center;
    double radius;
};
 
double S(Krug k) {
    return M_PI * k.radius * k.radius;
}
double L(Krug k) {
    return 2 * M_PI * k.radius;
}
 
int main() {
 
    Krug krug;
    krug.center.x = 0.0;
    krug.center.y = 1.0;
    krug.radius = 2.5;
    std::cout << "S=" << S(krug) << std::endl;
    std::cout << "L=" << L(krug) << std::endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 16:48     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат
Еще ссылки по теме:

Многоугольник на плоскости задан целочисленными координатами своих N вершин в декартовой системе координат (найти площадь многоугольника) C++
C++ Программа, определяющая положение точки в декартовой и полярной системе координат
Объявить структуру содержащую данные для построения круга C++

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 16:48     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат #15
Полное решение. Изучайте.
Кликните здесь для просмотра всего текста
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
138
139
140
#include<iostream>
#include<cmath>
/**
 *  /Структура вектор
 */
struct vect
{
    double x0;
    double y0;
    vect(): x0(0), y0(0)
    {}
    vect(double x, double y): x0(x), y0(y)
    {}
};
 
/**
 *  /Структура круг
 */
struct krise
{
    vect center;
    double Radius;
    krise(): center(), Radius(0)
    {}
    krise(double x, double y, double R): center(x , y), Radius(R)
    {}
};
 
/**
 *  /Перегрузим операции, что бы легче было работать (аля ООП)
 */
vect operator+ (vect v1, vect v2)
{
    return vect(v1.x0 + v2.x0, v1.y0 + v2.y0);
}
vect operator- (vect v1, vect v2)
{
    return vect(v1.x0 - v2.x0, v1.y0 - v2.y0);
}
vect operator/ (vect v1, int number)
{
    return vect(v1.x0 / number, v1.y0 / number);
}
vect operator* (vect v1, double number)
{
    return vect(v1.x0 * number, v1.y0 * number);
}
 
/**
 *  /Вычисление модуля вектора
 */
float AbsVector(const vect& v);
 
/**
 *  /Функция возвращает огибающий круг
 */
krise Find(const krise&, const krise&);
 
/**
 *  /Функция возвращает верхнюю точку пересечения окружностей
 */
vect PointOne(const krise&, const krise&);
 
/**
 *  /Функция возвращает нижнюю точку пересечения окружностей
 */
vect PointTwo(const krise&, const krise&);
 
int main(int argc, char* argv[])
{
    system("chcp 1251>0");
 
    krise kris1(0, 0, 2);
    krise kris2(1, 0, 2);
    krise kr;
    /**
     *  /Выводим огибающий круг
     */
    kr = Find (kris1, kris2);
    std::cout << "Огибающий круг:";
    std::cout << "(" << kr.center.x0 << ", " << kr.center.y0 << ", " << kr.Radius << ")" << std::endl;
 
    vect peres;
 
    /**
     *  /Выводим точки пересечения
     */
    peres = PointOne(kris1, kris2);
    std::cout << "Первая точка пересечения:";
    std::cout << "(" << peres.x0 << ", " << peres.y0 << ")" << std::endl;
 
    peres = PointTwo(kris1, kris2);
    std::cout << "Вторая точка пересечения:";
    std::cout << "(" << peres.x0 << ", " << peres.y0 << ")" << std::endl;
 
    return 0;
}
krise Find(const krise& kr1, const krise& kr2)
{
    /**
    *  /Если один круг лежит внутри другого возвращаем внешний круг
    */
    if((kr1.Radius + AbsVector(kr1.center - kr2.center)) < kr2.Radius)
        return kr2;
    else if ((kr2.Radius + AbsVector(kr1.center - kr2.center)) < kr1.Radius)
        return kr1;
    /**
    *  /Ищем огибающий круг. Знание линейной алгебры поможет вам понять код
    */
    krise temp;
    temp.Radius = (kr1.Radius + kr2.Radius + AbsVector(kr1.center - kr2.center)) / 2;
    temp.center = (kr1.center + kr2.center) / 2 + vect((kr1.center.x0 - kr2.center.x0) / AbsVector(kr1.center - kr2.center), (kr1.center.y0 - kr2.center.y0) / AbsVector(kr1.center - kr2.center)) * (kr2.Radius - kr1.Radius);
    return temp;
}
float AbsVector(const vect& v)
{
    return sqrt(pow(v.x0, 2) + pow(v.y0, 2));
}
 
vect PointOne(const krise& kr1, const krise& kr2)
{
    double angle1, angle2;
    angle1 = acos((-pow(kr2.Radius, 2.0) + pow(kr1.Radius, 2.0) + pow(AbsVector(kr1.center - kr2.center), 2.0)) / ( 2 * kr1.Radius * AbsVector(kr1.center - kr2.center)));
    angle2 = atan( abs(kr2.Radius - kr1.Radius) / AbsVector(kr1.center - kr2.center));
    vect temp;
    temp.x0 = kr1.center.x0 + kr1.Radius * cos(angle1 + angle2);
    temp.y0 = kr1.center.y0 + kr1.Radius * sin(angle1 + angle2);
    return temp;
}
 
vect PointTwo(const krise& kr1, const krise& kr2)
{
    double angle1, angle2;
    angle1 = acos((-pow(kr2.Radius, 2.0) + pow(kr1.Radius, 2.0) + pow(AbsVector(kr1.center - kr2.center), 2.0)) / ( 2 * kr1.Radius * AbsVector(kr1.center - kr2.center)));
    angle2 = atan( abs(kr2.Radius - kr1.Radius) / AbsVector(kr1.center - kr2.center));
    vect temp;
    temp.x0 = kr1.center.x0 + kr1.Radius * cos(angle2 - angle1);
    temp.y0 = kr1.center.y0 + kr1.Radius * sin(angle2 - angle1);
    return temp;
}
Yandex
Объявления
31.10.2013, 16:48     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат
Ответ Создать тему
Опции темы

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