Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 16.01.2018
Сообщений: 75

Пересечение кругов

28.05.2018, 23:38. Показов 1403. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер буду благодарен за помощь))
Смотрите нам даны два круга нам известно координаты их центров пусть будут х0, у0 и х1, у1 а также радиусы r0 и r1 надо найти общий площадь сечения (если не поняли то есть еще рисунок надеюсь поймете) и вот мой код не могу понять в чем ошибка (я знаю что есть еще другие варианты пересечения я это сделаю но никак не пойму в чем ошибка)
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
#include <math.h>
#include <iostream>
#include <cmath>
using namespace std;
const double pi = 3.1415926535897932384626433832795;
int main() {
    double x0, y0, r0, x1, y1, r1, d, a, h, x2, y2,sc,sc1;
    double x3, y3, kut, s, x3l, y3l, leng,  kut1, s1;
    cin >> x0 >> y0 >> r0;
    cin >> x1 >> y1 >> r1;
    d = sqrt(pow((x0 - x1), 2) + pow((y0 - y1), 2));//відстань між центрами кіл
    
    
        a = (pow(r0, 2) - pow(r1, 2) + pow(d, 2)) / (2 * d);//on picture
        h = sqrt(pow(r0, 2) - pow(a, 2));//on picture
 
        x2 = x0 + (a*(x1 - x0)) / d;
        y2 = y0 + (a*(y1 - y0)) / d;//координати точки п2
 
        x3 = x2 - (h*(y1 - y0)) / d;
        y3 = y2 - (h*(x1 - x0)) / d;
        x3l = x2 + (h*(y1 - y0)) / d;
        y3l = y2 + (h*(x1 - x0)) / d;
        //перший трикутник
        kut = (180 / pi) * (h / r0);//градусна міра кута першого трикутника
 
 
        leng = h * 2;//відстань між точками перетину кіл
        s = (a * leng) / 2;//площа першого трикутника
 
        //другий трикутник
        kut1 = ((180 / pi) * (h / r1));
        s1 = ((d - a) * leng) / 2;//площа другого трикутника
 
        //сигменти
        sc = ((pi*pow(r0, 2)*kut) / 360) - s;
        sc1 = ((pi*pow(r1, 2)*kut) / 360) - s1;
        cout << sc + sc1;
    
    system("pause");
}
Миниатюры
Пересечение кругов  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2018, 23:38
Ответы с готовыми решениями:

Пересечение двух кругов
Привет. Есть входной файл такого формата: Первый ряд цифр относится к первому кругу, 1 - координата по х, 1 - координата по y, 1...

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

Пересечение двух прямых и проверка на пересечение
Доброго времени суток слизал функцию проверки отсюда:/segments_intersection_checking на всякий случай у меня она выглядит так: int...

9
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.05.2018, 00:09
_Milk_, решал эту задачу, там ещё ошибка была в девятом знаке после запятой на скрине, сбросьте оригинал условия, чтобы можно было найти по поиску
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
29.05.2018, 00:34
Цитата Сообщение от Yetty Посмотреть сообщение
решал эту задачу
через интегралы\сегменты кругов\ ещё как-то?
Сам в коде выражать тут поленился)
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.05.2018, 01:05
Цитата Сообщение от Herji Посмотреть сообщение
через интегралы\сегменты кругов\ ещё как-то?
Сам в коде выражать тут поленился)
да, разность двух определённых интегралов. второй раз уже тоже неинтересно

Добавлено через 9 минут
хотя нет, не так скорее было, вроде один интеграл находил, а потом умножал на 4. найти бы тему точно сказал
0
0 / 0 / 1
Регистрация: 16.01.2018
Сообщений: 75
29.05.2018, 10:41  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
_Milk_, решал эту задачу, там ещё ошибка была в девятом знаке после запятой на скрине, сбросьте оригинал условия, чтобы можно было найти по поиску
http://algotester.com/en/Archi... play/40350
0
692 / 489 / 251
Регистрация: 10.06.2016
Сообщений: 2,337
29.05.2018, 11:00
Число pi - недостаточное количество разрядов.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.05.2018, 14:18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main() 
{
    double x1, y1, r1, x2, y2, r2, d, a1, a2, h, S1, S2, S;    
    cin >> x1 >> y1 >> r1;
    cin >> x2 >> y2 >> r2;
    d = hypot(x1-x2,y1-y2);   
    a1 = (d*d+r1*r1-r2*r2)/(2*d);    
    a2 = (d*d+r2*r2-r1*r1)/(2*d);    
    h = sqrt(r1*r1-a1*a1);    
    S1 = r1*r1*asin(h/r1)-a1*h;
    S2 = r2*r2*asin(h/r2)-a2*h;
    S=S1+S2;    
    cout <<setprecision(9)<<fixed<<S<<endl;      
system("pause");
return 0;
}
1
0 / 0 / 1
Регистрация: 16.01.2018
Сообщений: 75
29.05.2018, 17:02  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main() 
{
    double x1, y1, r1, x2, y2, r2, d, a1, a2, h, S1, S2, S;    
    cin >> x1 >> y1 >> r1;
    cin >> x2 >> y2 >> r2;
    d = hypot(x1-x2,y1-y2);   
    a1 = (d*d+r1*r1-r2*r2)/(2*d);    
    a2 = (d*d+r2*r2-r1*r1)/(2*d);    
    h = sqrt(r1*r1-a1*a1);    
    S1 = r1*r1*asin(h/r1)-a1*h;
    S2 = r2*r2*asin(h/r2)-a2*h;
    S=S1+S2;    
    cout <<setprecision(9)<<fixed<<S<<endl;      
system("pause");
return 0;
}
так а в чем моя ошибка?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
29.05.2018, 17:54
Цитата Сообщение от _Milk_ Посмотреть сообщение
так а в чем моя ошибка?
много текста. если серьёзно не вникал, специально для Вас сделал через сегменты, чтобы Вы сравнили строки со своими и выявили ошибки (так как я бы делал через интеграл). навскидку неправильно определяете угол (не используете арксинус), pi при этом условии не нужно использовать, возможно ещё что-то - посмотрите сами.

кстати в дальнейшем (для других задач) для числа Пи рекомендую вместо
Цитата Сообщение от _Milk_ Посмотреть сообщение
const double pi = 3.1415926535897932384626433832795;
использовать M_PI
0
0 / 0 / 1
Регистрация: 16.01.2018
Сообщений: 75
29.05.2018, 18:02  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
много текста. если серьёзно не вникал, специально для Вас сделал через сегменты, чтобы Вы сравнили строки со своими и выявили ошибки (так как я бы делал через интеграл). навскидку неправильно определяете угол (не используете арксинус), pi при этом условии не нужно использовать, возможно ещё что-то - посмотрите сами.

кстати в дальнейшем (для других задач) для числа Пи рекомендую вместо

использовать M_PI
Хорого спосибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2018, 18:02
Помогаю со студенческими работами здесь

Даны площади нескольких кругов
Помогите сделать программу! Даны площади нескольких кругов. Найти радиус самого маленького из них! Заранее спасибо!

Определить наличие вложенных кругов
Случайным образом формируются координаты X и Y центра и R – радиус 20 кругов. Диапазон значений координат от минус 100 до 100, диапазон...

Класс для рисования кругов
Класс для рисования кругов (хранить радиус R и координаты x,y центра). Вычислять площадь круга и длину окружности.

Рисование кругов по клику мыши
Всем привет. Прошу у Вас помощи реализовать следующую задачку: По клику мышки появляется красный круг, их можно сколько угодно (не больше...

Попадает ли точка А в один из кругов , C1(1, 1); , C2(5, 4)?
Напишите программу разветвляющегося вычислительного процесса. Попадает ли точка А в один из кругов , C1(1, 1); , C2(5, 4)?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru