Слияние сегментов 2d

Я ищу способ объединения двухмерных сегментов. Линейный сегмент состоит из двух векторных точек, начала сегмента линии и конечной точки сегмента линии.

Я хочу присоединиться к линейным сегментам, которые выглядят так, как будто они должны образовывать одну и ту же прямую линию. Я не хочу присоединяться к сегментам линии, если они имеют совершенно разные ориентации, но имеют около 2 точек друг от друга. Система, в которой я собираюсь использовать это, - это система компьютерного зрения, поэтому полученные сегменты линии не будут идеальными, т.е. Ориентации могут быть слегка отключены, сегменты могут быть не полной длиной e.t.c.

Я думаю, что следующие 3 примера охватывают типы сегментов линии, которые я хочу объединить:

Example

Спасибо

Ответ 1

Это проблема вычислительной геометрии, возможно, в некоторых учебниках могут быть некоторые решения, но следует предупредить, что эти проблемы, как правило, очень трудно решить, и конечная точность является реальной проблемой. Что касается этой проблемы (в 2D), то вы, вероятно, ищете, что линии находятся рядом с collinear. Обычно, чтобы определить, являются ли линии коллинеарными, нужно сначала поместить их в векторное представление , затем взять точечный продукт между векторами, который будет равный косинусу угла между линиями. Итак, если это значение близко к одному, они близки к коллинеарным и должны быть объединены.

Следующая проблема заключается в определении того, являются ли линии достаточно близкими, чтобы их нужно было соединить. Вы можете сделать это, найдя строки, которые intersect или найти строки, которые имеют начальную и конечную точки, которые очень близки... Это еще не все что легко, в общем, но вы, вероятно, можете получить 95% из них таким образом.