У меня есть одна точка и набор фигур. Мне нужно знать, содержится ли точка в составной форме этих фигур. То есть, где все фигуры пересекаются.
Но это самая легкая часть.
Если точка находится за пределами составной фигуры, мне нужно найти положение в пределах этой составной фигуры, которое ближе всего к точке.
Эти формы могут быть типа:
- квадрат
- круг
- кольцо (круг с другим кружком, вырезанным из центра)
- обратный круг (в основном это просто круглое отверстие и бесконечная заливка вне этого отверстия, или до конца холста должен быть предел его размера)
- часть круга (как на круговой диаграмме)
- часть кольца (как указано выше, но
- линия
В приведенном ниже примере есть перевернутый круг (самый большой круг с серым вокруг него), кольцо (topleft), квадрат и линия.
Если мы не рассматриваем линию, то оранжевая часть является формой, которую нужно ограничить. Если линия принимается во внимание, то насыщенная оранжевая часть линии является формой, которую необходимо ограничить.
Черные маленькие точки представляют точки, которые необходимо ограничить. Синие точки представляют желаемый результат. (a 1, b 2 и т. д.)
Точка "f" не имеет соответствующего ограниченного результата, поскольку она уже находится в оранжевой области.
Для целей этого примера только точка «e» ограничена линией, все остальные - оранжевой оранжевой областью.
Если ни одна из фигур не пересекается, то точка не может быть ограничена. Если ограничение будет состоять из двух линий, пересекающих друг друга, то каждая точка будет ограничена одной и той же позицией (точной позицией пересечения линий).
Я нашел методы, которые близки к этому, но ни один из них я не смог бы объединить для создания вышеуказанных функций.
Несколько похожих вопросов, которые я нашел:
Точки внутри полукруга
Какой алгоритм я могу использовать для определения точек внутри полукруга?
Точка, ближайшая к MovieClip
Вспышка: ближайшая точка к мувиклипу
Ближайшая точка через сумму Минковского (это сработает, если я смогу преобразовать составную фигуру в многоугольники)
http://www.codezealot.org/archives/153
Выберите край полигона, ближайший к точке (аналогично приведенному выше)
Для точки в неправильном многоугольнике, какой самый эффективный способ выбрать край, ближайший к точке?
PS: я заметил, что оранжевая область на некоторых экранах может выглядеть желтой. В любом случае это цветная область.