#computational-geometry
#вычислительная геометрия
Вопрос:
Даны два набора линий A и B, всего n линий и точка p. Как определить, лежат ли линии A по одну сторону от p, а линии B — по другую сторону?
Комментарии:
1. Здесь недостаточно информации. Это двухпространство? 3-пробел? Отсортированы ли линии в каком-либо смысле? Кроме того, я действительно не уверен, есть ли какой-либо реальный смысл в идее «на определенной стороне точки»
2. Я бы подумал, что это можно обобщить до N измерений. Учитывая точку, вы всегда можете разделить N-пространство на две части с (N-1)-мерным объектом. (Точка делит линию; линия делит плоскость; плоскость делит трехмерное пространство; и т.д.)
3. Как вы можете находиться «по одну сторону от точки»? Это не имеет смысла. Может быть, плоскость?
Ответ №1:
Если все линии не параллельны друг другу, они всегда будут пересекать обе стороны p
, поскольку они продолжаются вечно. В противном случае проведите линию, параллельную одной из других линий, которая проходит через p
, и эта линия разделит два набора.
Ответ №2:
Предполагая следующее:
1. Это не домашнее задание.
2. «Пересечение P» означает, что для данного диапазона x, y они не пересекаются. Если мы говорим обо всей оси, то линии в A и B должны быть параллельны относительно их набора, и этот вопрос становится тривиальным.
Тогда простой (хотя и наивный) подход (O (n)) заключается в простом сравнении каждого значения x линий со значением x точки (для вашего заданного y-значения p). Если для заданного y все x-координаты множества A (или B) находятся слева от заданной точки и для заданного x все значения y НЕ выше этой точки, то это множество находится с одной стороны. Запустите тот же тест для другого набора и убедитесь, что все линии находятся по другую сторону. Et viola. 🙂
Надеюсь, это поможет.
Комментарии:
1. Могу ли я попытаться немного изменить проблему? Если я предполагаю, что линии являются точками, а точка — линией. Тогда как мне определить, указывает ли A на одной стороне линии p, а B — на другой стороне?
2. Затем вам придется выполнить тот же алгоритм, за исключением сравнения значения x точек со значением x линий для данного y .