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
Точка должна находиться внутри круга, значит и на окружности и внутри неё, поэтому знак равно заменил на знак меньше или равно.
*/
ЕК
Ерхан Каиркулов
62 904
Лучший ответ
Олег Баранов Большое спасибо, за помощь!
Находите расстояние между точкой 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) принадлежит кругу, но при этом ведь вовсе не находится внутри него -вот зачем здесь нужно строгое "меньше", а не "меньше или равно"...
Олег Медведев
Олег Медведев
66 572