
C/C++
Определить находиться ли точка внутри круга, С++

#include <iostream>
using namespace std;
void yes()
{
cout << "Точка находится внутри круга." << endl;
}
void no()
{
cout << "Точка не лежит внутри круга." << endl;
}
int main()
{
double x0,y0,R0,x1,y1;
cout << "xo = ";
cin >> x0;
cout << "y0 = ";
cin >> y0;
cout << "R0 = ";
cin >> R0;
cout << "x1 = ";
cin >> x1;
cout << "y1 = ";
cin >> y1;
if((x1 - x0)*(x1 - x0) + (y1 - y0)*(y1 - y0) <= R0*R0)
yes();
else
no();
return 0;
}
/*
формулу для окружности я посмотрел в Википедии:
https://ru.wikipedia.org/wiki/Окружность
(x-x0)^2 + (y-y0)^2 = R^2
Точка должна находиться внутри круга, значит и на окружности и внутри неё, поэтому знак равно заменил на знак меньше или равно.
*/
using namespace std;
void yes()
{
cout << "Точка находится внутри круга." << endl;
}
void no()
{
cout << "Точка не лежит внутри круга." << endl;
}
int main()
{
double x0,y0,R0,x1,y1;
cout << "xo = ";
cin >> x0;
cout << "y0 = ";
cin >> y0;
cout << "R0 = ";
cin >> R0;
cout << "x1 = ";
cin >> x1;
cout << "y1 = ";
cin >> y1;
if((x1 - x0)*(x1 - x0) + (y1 - y0)*(y1 - y0) <= R0*R0)
yes();
else
no();
return 0;
}
/*
формулу для окружности я посмотрел в Википедии:
https://ru.wikipedia.org/wiki/Окружность
(x-x0)^2 + (y-y0)^2 = R^2
Точка должна находиться внутри круга, значит и на окружности и внутри неё, поэтому знак равно заменил на знак меньше или равно.
*/
Олег Баранов
Большое спасибо, за помощь!
Находите расстояние между точкой x0,y0 и вашей точкой x1,y1 - если расстояние меньше или равно радиусу, значит она в круге. Если нет, то нет.
Коли уж необходимо выяснить лежит ли точка внутри круга, а не, скажем, на его границе или вообще извне, то для этого просто нужно провести проверку на выполнение следующего условия:
(x₀-x₁)²+(y₀-y₁)²<R₀². И никакого расстояния тут находить, естественно, не нужно. Поэтому лучше как-нибудь так:
#include <iostream>
int main() { long double x0, x1, y0, y1, R0;
std::cout << "x0 y0 R0 x1 y1: "; std::cin >>
x0 >> y0 >> R0 >> x1 >> y1; x1 -= x0; y1 -= y0;
std::cout << (x1 * x1 + y1 * y1 < R0 * R0 ? "Inside":
"Not inside") << std::endl; }
Если круг задаётся, например, своей граничной окружностью x²+y²=25 с радиусом R0=5 и с центром в начале координат, то точка с координатами (3;4) принадлежит кругу, но при этом ведь вовсе не находится внутри него -вот зачем здесь нужно строгое "меньше", а не "меньше или равно"...
(x₀-x₁)²+(y₀-y₁)²<R₀². И никакого расстояния тут находить, естественно, не нужно. Поэтому лучше как-нибудь так:
#include <iostream>
int main() { long double x0, x1, y0, y1, R0;
std::cout << "x0 y0 R0 x1 y1: "; std::cin >>
x0 >> y0 >> R0 >> x1 >> y1; x1 -= x0; y1 -= y0;
std::cout << (x1 * x1 + y1 * y1 < R0 * R0 ? "Inside":
"Not inside") << std::endl; }
Если круг задаётся, например, своей граничной окружностью x²+y²=25 с радиусом R0=5 и с центром в начале координат, то точка с координатами (3;4) принадлежит кругу, но при этом ведь вовсе не находится внутри него -вот зачем здесь нужно строгое "меньше", а не "меньше или равно"...
Похожие вопросы
- Нужно написать программу вхождения точки в круг, при этом рассмотреть отдельно на границе и за пределами
- Распределение случайных точек внутри окружности радиуса R и с центром (x, y)
- Как определить принадлежит ли точка закрашенной области.
- Как наиболее эффективно определить ориентацию прямого угла по трем точкам?
- Программный код для рисования круга на C++
- Задача о принадлежности точки некоторой области на С++
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Расчет площади по двумерным точкам С++
- Создание класса точка в С++
- Определить встречается ли в последовательности группа букв 'one', определить последнее вхождение этой группы