C/C++

Задача на проверку попадания точки в заданную область в С++

Помогите пожалуйста написать код, который будет проверять, попала ли точка в заштрихованную область, или нет. Я тут набросал немного. Код запускается, но показывает неправильные значения.
Замени float на double.
 double x, y;
cin >> x >> y;
if (x * x + y * y = 2 * fabs(x) && x * y >= 0) {
// входит
} else {
// не входит
}
В твоём коде отсутствует проверка того, что точка находится в первом или третьем квадранте. Самый простой вариант такой проверки:
x ∙ y ≥ 0

Проверку единичных кругов можно упростить:
(x - 1)² + y² ≥ 1 || (x + 1)² + y² ≥ 1 эквивалентно: (|x| - 1)² + y² ≥ 1
Раскрываем скобки и получаем:
|x|² - 2 ∙ |x| + 1 + y² ≥ 1
x² + y² ≥ 2 ∙ |x|

И для возведения в квадрат не имеет смысла использовать pow: банальные x * x и y * y намного эффективнее.
Владимир Михайлов
Владимир Михайлов
56 875
Лучший ответ
 #include  
#include
using namespace std;
int main() {
const auto r1 = 1.0;
const auto r2 = 2.0;
double x, y;
cin >> x >> y;
if (sqrt(x * x + y * y) > r2) puts("NO");
else if (x * y < 0) puts("NO");
else {
auto x1 = fabs(x) - r1;
if (sqrt(x1 * x1 + y * y) < r1) puts("NO");
else puts("YES");
}
}
P.S. Код принимает точку расположенную на границе области как входящую в данную область.
 #include 

int main()
{
double x, y;
std::cin >> x >> y;
bool in_aria = true;
in_aria &= x * x + y * y = 0; //проверка на вхождение в четверть
in_aria &= ((abs(x) - 1) * (abs(x) - 1) + y * y >= 1); //проверка на не вхождение в малые окружности
std::cout
OC
Oleg Chuiko
51 416