Для заштрихованной области узнать принадлежит ли точка этой облаcти

При вводе координат x и y нужно вывести принадлежит ли точка заштрихованной области.Помогите пожалуйста Вот мой код,но что-то в нем не так:

int x, y, a = 0, b = 0, r2 = 5;
float r1 = 2.5;
cout << "Enter the coordinates of the point" << endl;
cout << "Enter x" << endl;
cin >> x;
cout << "Enter y" << endl;
cin >> y;
if (x >= 0 && y > 0 && (pow((x - a), 2) + pow((y - b), 2) <= pow(r1, 2))) {
    cout << "The point does not belong to the shaded area" << endl;
}
else {
    if (x > 0 && y < 0 || y > 0 && (pow((x - a), 2) + pow((y - b), 2) <= pow(r2, 2))){
        cout << "The point belongs to the shaded area" << endl;
    }
else {
cout << "The point does not belong to the shaded area" << endl;

Ответы (1 шт):

Автор решения: Harry

Смотрю больше не по рисунку, а по формулам — что у вас две окружности радиусом 2.5 и 5 (на рисунке скорее эллипс, но рисунок слишком мелкий) и центром в начале координат.

У вас просто неверно составлены условия. Например, проверки y>0 или y<0 просто бессмысленны — область симметрична относительно оси x...

Давайте смотреть, когда точка принадлежит области... Когда она в правой полуплоскости, т.е. при x>=0, и между двумя окружностями, так?

Т.е.

bool isIn(double x, double y)
{
    if (x < 0) return false; // В левой полуплоскости
    double r2 = x*x+y*y;     // Квадрат расстояния до центра
    return (r2 < 5*5 && r2 > 2.5*2.5);
}

Все. Осталось использовать:

cout << "Enter the coordinates of the point" << endl;
cout << "Enter x" << endl;
cin >> x;
cout << "Enter y" << endl;
cin >> y;
cout << "The point " 
     << (isIn(x,y) ? "belongs" : "does not belong")
     << " to the shaded area\n";
→ Ссылка