Даны числа 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;
if (x1 < 0) and (y1 < 0) then writeln('Точка внутри прямоугольника') else if (x1 = 0) and (y1 = 0) then writeln('Точка на границе прямоугольника') else writeln('Точка вне прямоугольника'); end.
Число 307 в двоичной записи выглядит вот так : <span>100110011 соответственно 5 единиц. (перевести число 307 в двоичную систему и просто посчитать единицы)</span>