Задачи на принадлежность точки фигуре на плоскости.
Задачи на принадлежность точки фигуре на плоскости очень часто вызывают затруднение. Эти, на первый взгляд, абстрактные задачи используются при программировании игр и создании различных моделей. Эти задачи можно решать как в одну, так и в другую сторону. В первом случае дан рисунок, а нужно составить программу, во втором по строке, условию принадлежности точки фигуре, необходимо восстановить рисунок.
К самым простым отнесем фигуры прямоугольной формы. Требуется определить какими прямыми ограничена данная фигура и составить неравенства объединив их связкой And. Иногда необходимо разбить сложную фигуру на несколько прямоугольников и объединить их при помощи связки Or.
Дальше идет усложнение в сторону математики. Более сложные задачи могут содержать фигуры состоящие из прямоугольников и окружностей. Которые могут пересекаться, накладываться, исключать друг друга. Нам потребуется разделить данную фигуру на несколько простых, объединив их связкой Or.
Самые сложные задачи, содержат различные пересекающиеся фигуры с тем отличием, что в место прямоугольников используются треугольники, трапеции и произвольные четырехугольники. Основную сложность здесь представляет составление уравнений прямых, которыми ограничена фигура. Для этих целей можно воспользоваться уравнением прямой проходящей через две точки:
Можно еще больше усложнить задачу, если использовать в качестве линий ограничивающих фигуру, параболу, гиперболу, синусоиду и т.д.
Приведу решение задачи:
Здесь нет необходимости использовать уравнение прямой проходящей через две точки. Прямые идут под углом 45 градусов (из угла в угол клеточки). Следовательно они похожи на y=-x. Если к этому уравнению добавить смещение по оси Y. Получим искомые уравнения прямых y=-x+6 для верхнего треугольника y=-x-6 для нижнего треугольника.
Program n9;
Uses Crt;
Var x,y:real;
a:Boolean;
Begin
ClrScr;
Write('ВВеди x '); ReadLn(x);
Write('ВВеди y '); ReadLn(y);
a:= ((x>=0) and (y>=0) and (y<=6-x))
or ((x<=0) and (y<=0) and (y>=-x-6));
if a then writeln('Попадает')
else writeln('Не попадает');
end.
|