Как найти принадлежит ли точка заштрихованной области

Пусть необходимо определить попадает ли заданная точка с координатами (x,y) в заданную область:

В данном случае, очевидно, что точка (x,y) попадает на линию графика, если у=x. Точка попадает в закрашенную область, лежит выше линии графика, если y>x. Наконец, точка (x, y) лежит ниже линии графика, если yif y>x then writeln(‘Да, попадает’) else writeln(‘Нет’);

Аналогично, точка (x, y) попадает в закрашенную область,

если y>x2.

if y>x*x then writeln('Да, попадает')
         else writeln('Нет');

Рассмотрим попадание точки в круг. Уравнение окружности: x2+y2=r2, в представленном на рисунке случае r=1.

Точка (x, y) лежит на линии окружности, если расстояние до нее

$$l=sqrt{x^2+y^2}$$

, если l=r. Если l>r, то точка лежит вне окружности. Если l
readln(x,y);
l:=sqrt(x*x+y*y);
if l<1 then writeln(‘Да, попадает’)
else writeln(‘Нет’);

Для закрашенной области программный код имеет вид:

readln(x,y);
l:=sqrt(x*x+y*y);
if (l<1) and (y>x*x) 
    then writeln('Да, попадает') 
    else writeln('Нет'); 

Использование связок and, or весьма эффективно:

readln(x,y);
l:=sqrt(x*x+y*y);
if (l<1) and ((x>0) and (y>Sin(x)) or 
                (x<0) and (y<Sin(x))) 
				then writeln('Да, попадает')
                else writeln('Нет'); 

В демоверсии ЕГЭ 2010 была следующая графическая задача:

Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу

программа на паскале:

var x,y:real;
begin
  readln(x,y);
  if x*x+y*y >= 4 then
  if x > -2 then
  if y < -x then
    write('принадлежит')
  else
  write('не принадлежит')
end.

программа на бэйсике

INPUT X,Y 

IF X*X=Y*Y>=4 THEN
IF X>=-2 THEN
IF Y<=-X THEN
  PRINT "принадлежит"

ELSE
  PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF

END

программа на Си

void main(void) { 
  float x,y;
  scanf("%f%f",&x,&y);
  
  if (x*x+y*y>=4)
  if (x>-2)
  if (y<=-x)
    printf ("принадлежит");
  else
    printf("не принадлежит");
}

Последовательно выполните следующее:

1. Приведите пример таких чисел x,y, при которых программа неверно решает поставленную задачу.
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими си достаточно указать любой способ доработки исходной программ:

В соответствии с приведенными программами нарисуем блок-схему алгоритма

из которой сразу видно, где программист сделал ошибку. Конструкция Else всегда отностится к ближайшему If. При X*X+Y*Y<4 программа НИЧЕГО НЕ ВЫВОДИТ. Это соответствует, например, точке X=1, Y=1. Из условия задачи достаточно указать ОДНУ точку.

Доработка программы:

var x,y:real;
	    begin 
		readln(x,y);
		if (x*x+y*y>=4) and(x>=-2) and (y<-x) 
		   then  write('принадлежит')
		   else  write('не принадлежит')
		end.
	

Однако, эта доработка также не верна! Она не учитывает тот факт, что Y≥0. Приведенная программа будет считать лишние точки принадлежащими закрашенной области.

Правильная доработка программы:

var x,y:real;
	    begin 
		readln(x,y);
		if (x*x+y*y>=4) and(x>=-2) 
		  and (y<-x) and (y>=0) 
		   then  write('принадлежит')
		   else  write('не принадлежит')
		end.

Определение принадлежности точки плоскости заштрихованной области на графике

Определение принадлежности точки плоскости заштрихованной

области на графике

В задачах этого вида дан рисунок координатной плоскости, и некоей закрашенной/заштрихованной области, ограниченной набором прямых и кривых. Нужно определить, принадлежит ли точка с координатами (x,y) этой области или нет.

Так как уравнения всех границ указаны на графике, задачи этого вида требуют понимания того, какой знак нужно поставить в соответствующем неравенстве. плоскость бейсик паскаль программа

Выписав все неравенства, которые “ограничивают” закрашенную/заштрихованную область, и объединив их логической операцией «И» («AND»), получим условие, которое должна проверять программа. Если условие выполняется – точка принадлежит области, если не выполняется – не принадлежит.

Так, если искомую область ограничивает вертикальная прямая линия, то в общем виде уравнение этой прямой выглядит как

где а – то значение на оси х, через которое проходит данная прямая (напомним, что если эта прямая совпадает с осью у, то уравнение прямой будет “х=0”).

Так как ось х направлена вправо (на что указывает “стрелка”), то все значения координаты x справа от нашей прямой будут больше числа а. А все значения координаты х слева от нашей прямой (“х=а”) будут меньше а. Получаем, что если закрашенная/заштрихованная область лежит справа от прямой “х=а”, то все ее точки удовлетворяют условию “х>=а”, а если слева – то условию “х =a v вместо “х>а”): так как на графике все прямые и кривые нарисованы сплошной линией, то закрашенная/заштрихованная область включает свои границы. Поэтому мы и пишем “больше или равно” или “меньше или равно”. Строгие неравенства (строго больше/меньше) нужно было бы использовать, если бы границы области были бы нарисованы пунктиром.

Все остальные прямые и кривые, ограничивающие область, уравнения которых сводятся к виду “у=какое-то_выражение” нужно рассматривать с позиции у-координаты (ведь это именно она стоит в левой части уравнения). Так как ось “у” направлена вверх, то все точки, которые лежат выше прямой/кривой, должны удовлетворять условию “у>=это_выражение”, а все точки, лежащие ниже нее- условию “у =это_выражение”, а если ниже – то условию ” у 2 +y 2 =R 2 “

где R – радиус этой окружности.

Как вы, вероятно, понимаете, левая часть этого уравнения (х 2 +у 2 ) задает квадрат расстояния от начала координат до точки плоскости. Для всех точек нашей окружности это расстояние равно ее радиусу R. Именно в этом смысл уравнения окружности. Значит, для всех точек внутри окружности, включая саму окружность, это расстояние будет меньше R. Это можно выразить неравенством

А для всех точек снаружи окружности неравенство будет “x 2 +y 2 >R 2 “. Рассмотрим пример:

В данной задаче закрашенную область ограничивают три прямые линии: горизонтальная (ее уравнение “у=2”), наклонная (ее уравнение “у=х”) и вертикальная (она совпадает с осью у, ее уравнение “х=0”).

Относительно горизонтальной прямой закрашенная область находится снизу, поэтому знак неравенства должен быть “меньше или равно” – “у =х”.

Относительно вертикальной прямой закрашенная область находится справа, поэтому знак неравенства должен быть “больше или равно” – “x>=0”.

Итого получаем условие:

на Паскале и на Бейсике:

На Бейсике и Си, в данном случае, скобки можно не писать. Но лучше приучиться писать их всегда, чтобы не задумываться каждый раз, нужны они или нет.

В этом примере задача была очень простой – закрашенная область была ограничена только прямыми линиями. Если же область ограничена кривыми (или хотя бы одной кривой), то в список условий обычно приходится добавить еще одно или два условия- ведь кривая может в стороне от закрашенной области изменять свое направление.

И тогда получится, что набора ограничений, который мы написали, просто перечислив линии, ограничивающие область, может оказаться недостаточно. Рассмотрим пример:

Линий, ограничивающих закрашенную область, три: вертикальная прямая х=1,5, горизонтальная прямая у=0 и кривая у=х 2 .

Руководствуясь вышеприведенными рассуждениями, строим систему условий:

х =0 (закрашенная область лежит выше горизонтальной прямой) и у 2 (закрашенная область лежит ниже кривой).

Однако, этих условий недостаточно, чтобы ограничить закрашенную область.

Например, чтобы это понять, можно воспользоваться методом “штриховки”: для каждого условия заштрихуем разными способами область плоскости, удовлетворяющую этому условию. Там, где все штриховки пересекутся (наложатся одна на другую), все условия будут выполняться.

На рисунке видно, что все три штриховки накладываются друг на друга не только на закрашенной области, но и в области, на которую указывает пунктирная стрелка. Этот эффект объясняется очень просто – правило, которое позволяет задать область плоскости, просто перечислив уравнения ограничивающих линий с соответствующим знаком, действует только в том случае, если эти линии не изменяют своего направления (т.е. функции, графиками которых они являются — возрастающие или убывающие). В случае с параболой у=х это не так – слева от начала координат функция у=х2 убывает, а справа – возрастает, в результате чего наши условия неверно ограничивают закрашенную область.

Для исправления этой ошибки нужно добавить еще одно условие. Например, “х>=0”.

Таким образом, правильным ответом в данном случае будет: На Паскале и Бейсике:

(х>=0) AND (x =0) AND (y 0, х =0 и y 2 , которые должны выполниться одновременно.

Изучаем предложенную программу и замечаем, что одного условия – х>=0 – не хватает. Без него под систему условий х =0 и у 2 подпадают также точки под параболой слева от оси OY и сверху от оси ОХ. Чтобы ответить на первый вопрос задачи (и получить свой первый балл), вычислим какую-нибудь точку из этой области. Она должна быть сверху от оси ОХ (значит, у>0), слева от оси OY (значит, х 2 ). Возьмем какую-нибудь точку на оси ОХ такую, что х =0 и у 2 . Например, 0,5.

Отвечаем на первый вопрос: х=-1y=0,5

Теперь постараемся исправить программу. Основное (и очевидное), что нужно в программу добавить – проверку еще одного условия (х>0).

Однако за такое решение мы получим еще только один балл (из двух возможных).

Второй балл нам не дадут, потому что в программе “спрятана” не одна ошибка, а две – во-первых, программа не проверяет условие х х 2 и при х>1.5). В этих случаях программа просто ничего не выдает в качестве ответа (а должна выдавать “не принадлежит”).

Чтобы исправить эту ошибку нужно либо добавить еще столько ELSE, сколько не хватает (в нашем, исправленном, случае – еще три).

Либо (что гораздо проще и короче) записать условие принадлежности точки области через сложное условие (через логическое И). Рекомендуемый ответ должен выглядеть так:

Уравнение окружности.

Аналитическая геометрия дает единообразные приемы решения геометрических задач. Для этого все заданные и искомые точки и линии относят к одной системе координат.

В системе координат можно каждую точку охарактеризовать ее координатами, а каждую линию – уравнением с двумя неизвестными, графиком которого эта линия является. Таким образом геометрическая задача сводится к алгебраической, где хорошо отработаны все приемы вычислений.

Окружность есть геометрическое место точек с одним определенным свойством (каждая точка окружности равноудалена от одной точки, называется центром). Уравнение окружности должно отражать это свойство, удовлетворять этому условию.

Геометрическая интерпретация уравнения окружности – это линия окружности.

Если поместить окружность в систему координат, то все точки окружности удовлетворяют одному условию – расстояние от них до центра окружности должно быть одинаковым и равным окружности.

Окружность с центром в точке А и радиусом R поместим в координатную плоскость.

Если координаты центра (а;b), а координаты любой точки окружности (х; у), то уравнение окружности имеет вид:

Если квадрат радиуса окружности равен сумме квадратов разностей соответствующих координат любой точки окружности и ее центра, то это уравнение является уравнением окружности в плоской системе координат.

Если центр окружности совпадает с точкой начала координат, то квадрат радиуса окружности равен сумме квадратов координат любой точки окружности. В этом случае уравнение окружности принимает вид:

Следовательно, любая геометрическая фигура как геометрическое место точек определяется уравнением, связывающим координаты ее точек. И наоборот, уравнение, связывающее координаты х и у, определяют линию как геометрическое место точек плоскости, координаты которых удовлетворяют данному уравнению.

Примеры решения задач про уравнение окружности

Задача. Составить уравнение заданной окружности

Составьте уравнение окружности с центром в точке O (2;-3) и радиусом 4.

Решение.
Обратимся к формуле уравнения окружности:
R 2 = (x- a ) 2 + (y- b ) 2

Подставим значения в формулу.
Радиус окружности R = 4
Координаты центра окружности (в соответствии с условием)
a = 2
b = -3

Получаем:
(x – 2 ) 2 + (y – ( -3 )) 2 = 4 2
или
(x – 2 ) 2 + (y + 3 ) 2 = 16 .

Задача. Принадлежит ли точка уравнению окружности

Проверить, принадлежит ли точка A(2;3) уравнению окружности (x – 2) 2 + (y + 3) 2 = 16.

Решение.
Если точка принадлежит окружности, то ее координаты удовлетворяют уравнению окружности.
Чтобы проверить, принадлежит ли окружности точка с заданными координатами, подставим координаты точки в уравнение заданной окружности.

В уравнение ( x – 2) 2 + ( y + 3) 2 = 16
подставим, согласно условию, координаты точки А(2;3), то есть
x = 2
y = 3

Проверим истинность полученного равенства
( x – 2) 2 + ( y + 3) 2 = 16
( 2 – 2) 2 + ( 3 + 3) 2 = 16
0 + 36 = 16 равенство неверно

Таким образом, заданная точка не принадлежит заданному уравнению окружности.

Принадлежит ли точка кругу?

Определить, принадлежит ли точка с координатами (x; y) кругу радиуса R с центром в начале координат.

Пользователь вводит координаты точки и радиус круга.

Если выбрать точку на координатной плоскости, то можно увидеть, что проекции ее координат на оси x и y являются катетами прямоугольного треугольника. А гипотенуза этого прямоугольного треугольника как раз показывает расстояние от начала координат до точки. Таким образом, если длина гипотенузы будет меньше радиуса круга, то точка будет принадлежать кругу; иначе она будет находится за его пределами.

Длину гипотенузы вычисляется по теореме Пифагора: квадрат гипотенузы равен сумме квадратов катетов. Откуда гипотенуза равна квадратному корню из суммы квадратов катетов.

Пример выполнения программы:

Обратите внимание, можно вводить отрицательные координаты. При возведении в квадрат все-равно будет получено положительное число.

[spoiler title=”источники:”]

http://www.profmeter.com.ua/communication/learning/course/course7/chapter0552/?LESSON_PATH=456.552

http://younglinux.info/python/task/circle-radius

[/spoiler]

Круг:
(x – x0)^2+(y-y0)^2 < R^2 – множество точек внутри круга
(x – x0)^2+(y-y0)^2 > R^2 – множество точек вне круга
R – радиус круга, x0, y0 – координаты центра

Эллипс:
((x – x0)/a)^2+((y-y0)/b)^2 < 1 – множество точек внутри эллипса
((x – x0)/a)^2+((y-y0)/b)^2 > 1 – множество точек вне эллипса
a, b – радиусы эллипса

Прямые:
x < 0 – множество точек левее оси 0Y
x > 0 – множество точек правее оси 0Y
y < 0 – множество точек ниже оси 0X
y > 0 – множество точек выше оси 0X
ax+by < c множество точек ниже прямой, заданной уравнением ax+by = с
ax+by > c множество точек выше прямой, заданной уравнением ax+by = с

Для вашей задачи:
1. Находите нужные коэффициенты для всех прямых и кривых.
2. Выясняете для каждого уравнения знак, который получается при попадании точки в заштрихованной области
3. Создаёте набор тестов для точки.

Например для зоны B:
Точка должна быть внутри круга, вне эллипса и выше прямой, то есть должны выполняться следующие неравенства (коэффициенты a, b x0, y0 для каждого неравенства свои):
(x – x0)^2+(y-y0)^2 < R^2
((x – x0)/a)^2+((y-y0)/b)^2 > 1
ax+by > c
Дальше для тестовой точки проверяете неравенства, и если они все правильные – точка принадлежит заштрихованной области.

0 / 0 / 0

Регистрация: 04.02.2021

Сообщений: 40

1

Определить принадлежит ли точка заштрихованной области

10.06.2021, 18:22. Показов 1467. Ответов 8


Студворк — интернет-сервис помощи студентам

Дана точка на плоскости с координатами (x,y)/
Составить программу, которая выдает одно из сообщений: “Да”, “Нет”, “На границе” (см.фото) (C++)

Изображения

 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

10.06.2021, 18:22

Ответы с готовыми решениями:

Определить принадлежит ли точка заштрихованной области
Задана точка с координатами (х, у). Необходимо что бы был нарисован такой рисунок с использованием…

Определить, принадлежит ли точка (x, y) заштрихованной области
Помогите с заданием пж, я не понимаю как правильно задать границы этих 2х графиков.

вот как я…

Определить, принадлежит ли точка заштрихованной области
нужно написать программу, которая выводит на экран значение
true, если точка А с координатами х,…

Определить, принадлежит ли точка заштрихованной области
Задание: разработать функцию, реализующую предикат, принимающий значение истина, если точка с…

8

ПерС

584 / 487 / 371

Регистрация: 05.11.2013

Сообщений: 1,263

Записей в блоге: 6

10.06.2021, 22:33

2

Лучший ответ Сообщение было отмечено GreenPineapple как решение

Решение

“На границе” для вещественных чисел и без указания ширины границы – это не совсем корректная постановка, но можно считать толщину границы заданной как eps = 10-6

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
 double x = 3, y = 0.0001, r = sqrt(pow(x , 2) + pow(y, 2)), eps = 1e-6;
 if (abs(y) > eps) {
  if (abs(r - 3) < eps) cout << "Egde";
  else if (r < 3) cout << "Yes";
  else cout << "No";
 }
 else cout << "No";
 return 0;
}



1



Volga_

Эксперт CЭксперт С++

4616 / 2643 / 1423

Регистрация: 14.12.2018

Сообщений: 4,911

Записей в блоге: 1

10.06.2021, 22:45

3

Можно ли переписать код у ПерС:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double x = 3.0, y = 0.0001, r_2 = x * x + y * y, eps = 1e-10;
    if (y >= -eps && r_2 - 9 <= eps)
        cout << "Yes";
    else
        cout << "No";
    return 0;
}



0



584 / 487 / 371

Регистрация: 05.11.2013

Сообщений: 1,263

Записей в блоге: 6

10.06.2021, 22:59

4

А как же вывод состояния “На границе”?



0



Volga_

Эксперт CЭксперт С++

4616 / 2643 / 1423

Регистрация: 14.12.2018

Сообщений: 4,911

Записей в блоге: 1

10.06.2021, 23:13

5

ПерС, понял. Еще код будет !

Добавлено через 7 минут

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double x = -2.0, y = 0.00001, r_2 = x * x + y * y, eps = 1e-10;
    if (fabs(y) <= eps && fabs(r_2 - 9.0) <= eps)
        cout << "On edges !";
    else if (y > -eps && r_2 - 9.0 < eps)
        cout << "Yes";
    else
        cout << "No";
    return 0;
}

Но может быть это не лучше чем твой.

Добавлено через 1 минуту

Цитата
Сообщение от ПерС
Посмотреть сообщение

abs()

Ага, по-моему в твоем коде правильно будет функция fabs() вместо abs() при работе с типом double.



0



584 / 487 / 371

Регистрация: 05.11.2013

Сообщений: 1,263

Записей в блоге: 6

10.06.2021, 23:29

6

Цитата
Сообщение от Volga_
Посмотреть сообщение

функция fabs() вместо abs() при работе с типом double.

fabs была критична в C, в C++ abs шаблонна?



0



Yetty

7427 / 5021 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

10.06.2021, 23:37

7

ПерС, на самом деле при работе с уравнением окружности eps не требуется, можете проверить любые точки, например (1.8;2.4)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main()
{
    double x, y, R=3.;
    cout << "Coordinates x,y:n";
    cin >> x >> y;    
    
    if (x*x+y*y<R*R && y>0.) cout << "YESn";
    else if (x*x+y*y>R*R || y<0.) cout << "NOn";    
    else cout << "on the bordern";
  
system("pause");
return 0;
}



1



4022 / 3277 / 921

Регистрация: 25.03.2012

Сообщений: 12,247

Записей в блоге: 1

11.06.2021, 00:41

8

Yetty,

Определить принадлежит ли точка заштрихованной области



0



7427 / 5021 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

11.06.2021, 00:54

9

Kuzia domovenok, надеюсь к задаче ТС это отношения не имеет на двадцатой степени ещё работает, на двадцать пятой уже нет расскажите что там происходит на таких огромных числах



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

11.06.2021, 00:54

9

Николай Веселуха

Высший разум

(334022)


2 года назад

Пара координат на плоскости образуют радиус-вектор, длина которого рассчитывается по теореме Пифагора. Если значение вашего радиус-вектора меньше либо равно заданному 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”);
}
}

user49913

Просветленный

(35234)


2 года назад

(точка в круге) И (точка под наклонной прямой) И ((точка сверху от Ox) ИЛИ (точка слева от Oy))

Раскладываешь фигуру на комбинации (объединения или пересечения) более простых фигур. Ставишь соответствующие логические операции (ИЛИ и И) на место операций объединения и пересечения. В данном случае мы слепили один круг и три полуплоскости.

Anton

Искусственный Интеллект

(107796)


2 года назад

для первой четверти:
основное условие – 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 во второй четверти отрицательный)

Добавить комментарий