Взаимное расположение окружности и отрезка
Автор: VaultSchebnik • Апрель 20, 2021 • Лабораторная работа • 2,372 Слов (10 Страниц) • 472 Просмотры
Отчет по лабораторной работе №2
Выполнил Матюшин Роман Андреевич
Группа 121791
1. Цель работы
Научиться определять взаимное расположение окружности и отрезка
2. Алгоритм решения
Взаимное расположение окружности и прямой зависит от отношения радиуса R окружности к перпендикуляру H от центра окружности к прямой. Берем на прямой, точки A и B, соединяем их с центром окружности O, получаем треугольник AOB. Составим уравнение окружности и прямой. H – высота треугольника AOB, опущенная из вершины O, т.к SAOB = (1/2) * AB * H = (1/2) * |[AB,AO]| => H = |[AB,AO]| / |AB|.
Отрезок и окружность имеют 2 общие точки, если OA=OB=R
Отрезок и окружность имеют 1 общую точку, если H = R и углы между отрезком и центром окружности меньше 90, или если H < R и OA или OB > R
Отрезок и окружность не имеют общих точек, если H > R, или если H < R и OA или OB < R
3. Описание программы
3.1 Структуры входных данных
Координаты первой точки | X1, Y1 |
Координаты второй точки | X2, Y2 |
Координаты центра окружности | O1, O2 |
Радиус окружности | R |
3.2 Структура выходных данных
Результат обработки программы | Имеет 1,2 общие(-ую) точку, не имеет |
3.3 Алгоритм программы
1. Объявляем и вводим переменные точек и окружности.
2. Соединяем точки и получаем треугольник, находим высоту.
3. Сравниваем полученную высоту с радиусом окружности.
4. Программный код
#include <iostream>
#include <cmath>
using namespace std;
#define PI 3.14159265
int main()
{
setlocale(LC_ALL, "rus");
double x1, y1, x2, y2, O1, O2, R, h, a, b;
cout << "Введите координаты 1 точки отрезка" << endl;
cin >> x1 >> y1;
cout << "Введите координаты 2 точки отрезка" << endl;
cin >> x2 >> y2;
cout << "Координаты 1 точки отрезка равны " << "(" << x1 << "," << y1 << ")" << endl;
cout << "Координаты 2 точки отрезка равны " << "(" << x2 << "," << y2 << ")" << endl;
cout << "Введите координаты центра окружности" << endl;
cin >> O1;
cin >> O2;
cout << "Введите радиус окружности" << endl;
cin >> R;
cout << "Координаты центра окружности равны " << "(" << O1 << "," << O2 << ")" << endl;
cout << "Радиус окружности равен " << R << endl;
cout << "AB = " << "(" << (x2 - x1) << "," << (y2 - y1) << ")" << endl;
cout << "OB = " << "(" << (x2 - O1) << "," << (y2 - O2) << ")" << endl;
cout << "OA = " << "(" << (x1 - O1) << "," << (y1 - O2) << ")" << endl;
cout << "|[AB,OB]| = " << abs(((x2 - x1) * (y2 - O2)) - ((x2 - O1) * (y2 - y1))) << endl;
...