Даны числа x1,y,x2,y2,x3,y3.Определите лежит ли точка (x1,y1) внутри или вне прямоугольника

Даны числа x1,y,x2,y2,x3,y3.Определите лежит ли точка (x1,y1) внутри или вне прямоугольника, стороны которого паралельны осям кординат,а противолежащие вершины имеют координаты (x2,y2,) и (x3,y3)
Гость
Ответ(ы) на вопрос:
Гость
Заметим, что точка лежит внутри прямоугольника, если min(x2, x3) < x1 < max(x2, x3) и min(y2, y3) < y1 < max(y2, y3) (см. рисунок). Поэтому поступим так: сначала переставим x2 и x3, чтобы x2 стало меньше x3, потом повторим с y2 и y3, чтобы было y2 < y3. Затем можно проверять, что x2 < x1 < x3 и y2 < y1 < y3. Точка попадёт на границу, если x1 = x2 или x3, а y1 = y2 или y3. Если оба условия не выполнены, то точка лежит вне прямоугольника. Код (Паскаль): var   x1, y1, x2, y2, x3, y3, temp: real; begin   write('Координаты точки: '); readln(x1, y1);   write('Координаты первой вершины: '); readln(x2, y2);   write('Координаты второй вершины: '); readln(x3, y3);   if x2 > x3 then begin     temp := x2; x2 := x3; x3 := temp;   end;   if y2 > y3 then begin     temp := y2; y2 := y3; y3 := temp;   end;   if (x2 < x1) and (x1 < x3) and (y2 < y1) and (y1 < y3) then     writeln('Точка внутри прямоугольника')   else if ((x1 = x2) or (x1 = x3)) and ((y1 = y2) or (y1 = y3)) then     writeln('Точка на границе прямоугольника')   else     writeln('Точка вне прямоугольника'); end. Можно заменить проверки на такие: если min(x2, x3) < x1 < max(x2, x3), то среди разностей x1 - x2 и x1 - x3 одна положительная, а другая отрицательная. Тогда (x1 - x2)(x1 - x3) < 0. Следовательно, можно проверить только, что  (x1 - x2)(x1 - x3) < 0 и (y1 - y2)(y1 - y3) < 0. В случае, когда точка лежит на границе, оба произведения равны нулю. В моей программе произведения записаны в переменные x1 и y1. Код (Паскаль): var   x1, y1, x2, y2, x3, y3: real; begin   write('Координаты точки: '); readln(x1, y1);   write('Координаты первой вершины: '); readln(x2, y2);   write('Координаты второй вершины: '); readln(x3, y3);   x1 := (x1 - x2) * (x1 - x3);   y1 := (y1 - y2) * (y1 - y3);   if (x1 < 0) and (y1 < 0) then     writeln('Точка внутри прямоугольника')   else if (x1 = 0) and (y1 = 0) then     writeln('Точка на границе прямоугольника')   else     writeln('Точка вне прямоугольника'); end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы