Другие языки программирования и технологии
Проверить, находится ли координата в квадрате/прямоугольнике
Я знаю как определить находится ли координата в круге, но как проверить находится ли координата в квадрате, если известны все координаты 4-х точек, образующие квадрат?
Если прямоугольник параллелен осям координат, то ответы выше верны. Иначе задача усложняется. Самые примитивные способы:
1. Подсчитать сумму площадей 4 треугольников, образованных точкой и смежными вершинами прямоугольника. Если она больше площади прямоугольника, точка вне прямоугольника.
2. Подсчитать сумму углов с вершиной в точке и лучами, проходящими через смежные вершины. Если она меньше 360 градусов, точка вне прямоугольника.
А можно и так:
Запишем уравнение прямой, проходящей через точки (x1, y1) и (x2, y2) в виде;
(x-x1)/(x2-x1) = (y-y1)/(y2-y1) =>
(x-x1)*(y2-y1) - (y-y1)*(x2-x1) = 0
Тогда знак функции q(x, y) = (x-x1)*(y2-y1) - (y-y1)*(x2-x1) будет зависеть от того, с какой стороны прямой лежит точка x. Но если точка внутри квадрата, то она лежит по разные стороны от параллельных сторон прямоугольника.
Если точки перечислены в порядке:
1 2
3 4
(диагонали 1-4 и 2-3, остальное не важно)
То получаем проверку:
(((x - x1) * (y2-y1) - (y - y1) * (x2 - x1)) * ((x - x3) * (y4-y3) - (y - y3) * (x4 - x3)) <= 0) and
(((x - x1) * (y3-y1) - (y - y1) * (x3 - x1)) * ((x - x2) * (y4-y2) - (y - y2) * (x4 - x2)) <= 0)
1. Подсчитать сумму площадей 4 треугольников, образованных точкой и смежными вершинами прямоугольника. Если она больше площади прямоугольника, точка вне прямоугольника.
2. Подсчитать сумму углов с вершиной в точке и лучами, проходящими через смежные вершины. Если она меньше 360 градусов, точка вне прямоугольника.
А можно и так:
Запишем уравнение прямой, проходящей через точки (x1, y1) и (x2, y2) в виде;
(x-x1)/(x2-x1) = (y-y1)/(y2-y1) =>
(x-x1)*(y2-y1) - (y-y1)*(x2-x1) = 0
Тогда знак функции q(x, y) = (x-x1)*(y2-y1) - (y-y1)*(x2-x1) будет зависеть от того, с какой стороны прямой лежит точка x. Но если точка внутри квадрата, то она лежит по разные стороны от параллельных сторон прямоугольника.
Если точки перечислены в порядке:
1 2
3 4
(диагонали 1-4 и 2-3, остальное не важно)
То получаем проверку:
(((x - x1) * (y2-y1) - (y - y1) * (x2 - x1)) * ((x - x3) * (y4-y3) - (y - y3) * (x4 - x3)) <= 0) and
(((x - x1) * (y3-y1) - (y - y1) * (x3 - x1)) * ((x - x2) * (y4-y2) - (y - y2) * (x4 - x2)) <= 0)
x между х-ами и y между y-ами одновременно
Тарас Аксенов
Прямоугольник не обязательно параллелен осям координат.
стороны квадрата параллельны координатным осям?
если нет, то печаль - придется, например, посчитать сумму расстояний до противоположных сторон и, если они равны длине стороны квадрата, то всё ок.
если нет, то печаль - придется, например, посчитать сумму расстояний до противоположных сторон и, если они равны длине стороны квадрата, то всё ок.
X1<x<X2 && Y1<y<Y2
вот и всё условие.
вот и всё условие.
Похожие вопросы
- Помогите написать программу на С++: Заданы отрезки a,b,c,d. Проверить, могут ли они служить сторонами прямоугольника
- Объясните, пожалуйста, как написать программу в Pascal'e, которая определяет, находится ли координата в ромбе или нет.
- Даны координаты 3-ёх вершин прямоугольника. Найти координаты 4-ой вершины.
- Как по координатам трех точек треугольника определить - начало координат находится внутри него или за его пределами?
- Слушайте, как в Adobe Illustrator обвести текст в прямоугольник и залить его цветом? :) Что пробовал сделать - под катом
- Как нарисовать прямоугольник с границами в OpenGL?
- GraphABC. Надо нарисовать прямоугольники.
- Где находятся сами файлы реестра, чтобы проверить антивирусом именно их?
- turbo pascal 7.0 Определить принадлежность к области точек с заданными координатами!!!
- C++ Вывести сообщение о том, какая из точек ближе к началу координат, и все соответствующие расстояния.