
C/C++
Как определить принадлежит ли точка закрашенной области.
Я не понимаю как задать условие сложным фигурам. Опишите пожалуйста подробно по действия к примеру на это рисунке r = 5. (Сам код мне не нужен, я не понимаю как составить на бумаге систему из функций)


Пара координат на плоскости образуют радиус-вектор, длина которого рассчитывается по теореме Пифагора. Если значение вашего радиус-вектора меньше либо равно заданному R, то это является необходимым, но недостаточным условием для решения вашей задачи. На следующем шаге следует проверить совпадают ли координаты по знаку. Если совпадают, то точка принадлежит закрашенной области и находится в в первой или третьей четверти, иначе требуется дополнительная проверка, которая устанавливает нахождение точки во второй четверти, и если да, и сумма модулей координат меньше либо равна радиусу-вектору R, то точка принадлежит закрашенной области во второй четверти. Во всех остальных случаях ответ отрицательный.
#include <iostream>
using namespace std;
double input(const char* msg) {
cout << msg;
double value;
cin >> value;
return value;
}
bool signs(double x, double y) {
auto sx = x < 0 ? -1 : 1;
auto sy = y < 0 ? -1 : 1;
return sx == sy;
}
int main() {
double r, x, y, r_xy;
while (true) {
r = input("R: ");
x = input("x: ");
y = input("y: ");
r_xy = sqrt(x * x + y * y);
if (r_xy <= r && (signs(x, y) || ((x <= 0 && y >= 0) && fabs(x) + y <= r))) puts("Yes");
else puts("No");
}
}
#include <iostream>
using namespace std;
double input(const char* msg) {
cout << msg;
double value;
cin >> value;
return value;
}
bool signs(double x, double y) {
auto sx = x < 0 ? -1 : 1;
auto sy = y < 0 ? -1 : 1;
return sx == sy;
}
int main() {
double r, x, y, r_xy;
while (true) {
r = input("R: ");
x = input("x: ");
y = input("y: ");
r_xy = sqrt(x * x + y * y);
if (r_xy <= r && (signs(x, y) || ((x <= 0 && y >= 0) && fabs(x) + y <= r))) puts("Yes");
else puts("No");
}
}
для первой четверти:
основное условие - x1>0, y1>0, если оно соблюдается, то мы играем в первой четверти
далее по данной точке (x1,y1) делаешь уравнение прямой, проходящей через (0;0) - y=х * (y1/x1)
далее ищешь точку пересечения этой прямой с окружностью. окружность задана формулой y=sqrt(R^2-x^2)
и последнее - сравниваешь координаты - x1, y1 должны быть меньше чем x и y точки пересечения
для третьей четверти то же самое, только первое условие другое
для третьей еще проще - уравнение прямой: y=R+x, при нахождении точки пересечения даже квадратного уравнения не будет.
есть еще точки на осях, но их просто задать условием
if y1=0 then
if x1R then "входит" - аналогично для второй оси
----------
вот это я намудрил... всё же проще.
для первой и третьей четверти x1^2+y1^2<R^2 - это ясно из уравнения окружности
для третьей просто y1-x1<R (-x1. потому что x1 во второй четверти отрицательный)
основное условие - x1>0, y1>0, если оно соблюдается, то мы играем в первой четверти
далее по данной точке (x1,y1) делаешь уравнение прямой, проходящей через (0;0) - y=х * (y1/x1)
далее ищешь точку пересечения этой прямой с окружностью. окружность задана формулой y=sqrt(R^2-x^2)
и последнее - сравниваешь координаты - x1, y1 должны быть меньше чем x и y точки пересечения
для третьей четверти то же самое, только первое условие другое
для третьей еще проще - уравнение прямой: y=R+x, при нахождении точки пересечения даже квадратного уравнения не будет.
есть еще точки на осях, но их просто задать условием
if y1=0 then
if x1R then "входит" - аналогично для второй оси
----------
вот это я намудрил... всё же проще.
для первой и третьей четверти x1^2+y1^2<R^2 - это ясно из уравнения окружности
для третьей просто y1-x1<R (-x1. потому что x1 во второй четверти отрицательный)
(точка в круге) И (точка под наклонной прямой) И ((точка сверху от Ox) ИЛИ (точка слева от Oy))
Раскладываешь фигуру на комбинации (объединения или пересечения) более простых фигур. Ставишь соответствующие логические операции (ИЛИ и И) на место операций объединения и пересечения. В данном случае мы слепили один круг и три полуплоскости.
Раскладываешь фигуру на комбинации (объединения или пересечения) более простых фигур. Ставишь соответствующие логические операции (ИЛИ и И) на место операций объединения и пересечения. В данном случае мы слепили один круг и три полуплоскости.
Если границы входят в область, то надо просто перечислить условия (с нестрогими неравенствами !):
Точка принадлежит указанной области, если (x²+y²≤R²) и (y≤x+R) и (если х≥0, то у≥0).
Точка принадлежит указанной области, если (x²+y²≤R²) и (y≤x+R) и (если х≥0, то у≥0).
Похожие вопросы
- Задача о принадлежности точки некоторой области на С++
- Определить находиться ли точка внутри круга, С++
- Задача на проверку попадания точки в заданную область в С++
- Как наиболее эффективно определить ориентацию прямого угла по трем точкам?
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Расчет площади по двумерным точкам С++
- Создание класса точка в С++
- Определить встречается ли в последовательности группа букв 'one', определить последнее вхождение этой группы
- Нужно написать программу вхождения точки в круг, при этом рассмотреть отдельно на границе и за пределами
- Распределение случайных точек внутри окружности радиуса R и с центром (x, y)