Гервасий
5 год назад
Даны числа x1,y,x2,y2,x3,y3.Определите
лежит ли точка (x1,y1) внутри или вне прямоугольника,
стороны которого паралельны осям кординат,а противолежащие
вершины имеют координаты (x2,y2,) и (x3,y3)
ОТВЕТЫ
Андриан
Aug 11, 2019
Заметим, что точка лежит внутри прямоугольника, если min(x2, x3) lt; x1 lt; max(x2, x3) и min(y2, y3) lt; y1 lt; max(y2, y3) (см. рисунок).
Поэтому поступим так: сначала переставим x2 и x3, чтобы x2 стало меньше x3, потом повторим с y2 и y3, чтобы было y2 lt; y3. Затем можно проверять, что x2 lt; x1 lt; x3 и y2 lt; y1 lt; 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 gt; x3 then begin
temp := x2; x2 := x3; x3 := temp;
end;
if y2 gt; y3 then begin
temp := y2; y2 := y3; y3 := temp;
end;
if (x2 lt; x1) and (x1 lt; x3) and (y2 lt; y1) and (y1 lt; y3) then
writeln(Точка внутри прямоугольника)
else if ((x1 = x2) or (x1 = x3)) and ((y1 = y2) or (y1 = y3)) then
writeln(Точка на границе прямоугольника)
else
writeln(Точка вне прямоугольника);
end.
Можно заменить проверки на такие: если min(x2, x3) lt; x1 lt; max(x2, x3), то среди разностей x1 - x2 и x1 - x3 одна положительная, а другая отрицательная. Тогда (x1 - x2)(x1 - x3) lt; 0. Следовательно, можно проверить только, что (x1 - x2)(x1 - x3) lt; 0 и (y1 - y2)(y1 - y3) lt; 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 lt; 0) and (y1 lt; 0) then
writeln(Точка внутри прямоугольника)
else if (x1 = 0) and (y1 = 0) then
writeln(Точка на границе прямоугольника)
else
writeln(Точка вне прямоугольника);
end.
Поэтому поступим так: сначала переставим x2 и x3, чтобы x2 стало меньше x3, потом повторим с y2 и y3, чтобы было y2 lt; y3. Затем можно проверять, что x2 lt; x1 lt; x3 и y2 lt; y1 lt; 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 gt; x3 then begin
temp := x2; x2 := x3; x3 := temp;
end;
if y2 gt; y3 then begin
temp := y2; y2 := y3; y3 := temp;
end;
if (x2 lt; x1) and (x1 lt; x3) and (y2 lt; y1) and (y1 lt; y3) then
writeln(Точка внутри прямоугольника)
else if ((x1 = x2) or (x1 = x3)) and ((y1 = y2) or (y1 = y3)) then
writeln(Точка на границе прямоугольника)
else
writeln(Точка вне прямоугольника);
end.
Можно заменить проверки на такие: если min(x2, x3) lt; x1 lt; max(x2, x3), то среди разностей x1 - x2 и x1 - x3 одна положительная, а другая отрицательная. Тогда (x1 - x2)(x1 - x3) lt; 0. Следовательно, можно проверить только, что (x1 - x2)(x1 - x3) lt; 0 и (y1 - y2)(y1 - y3) lt; 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 lt; 0) and (y1 lt; 0) then
writeln(Точка внутри прямоугольника)
else if (x1 = 0) and (y1 = 0) then
writeln(Точка на границе прямоугольника)
else
writeln(Точка вне прямоугольника);
end.
237