В нашей системе есть требования, по которым мы хотим переместить некоторые исходные строки (с низкой точностью) в опорные линии (с высокой точностью). Следующие картинки дают нормальные варианты использования. Красный - это исходная линия, а синий - контрольная.
В этом случае исходная строка будет частично перемещена, и результат будет таким, как показывает зеленая линия:
Есть ситуации, когда исходная строка должна быть полностью перемещена.
Результат:
В настоящее время наше решение является руководитель проекта / конечную точку исходной линии к опорной линии, и наоборот, а затем найти проецируемые точки на линии источника и ссылки. С учетом этих прогнозируемых точек, мы можем извлечь необходимую часть исходной строки и эталонным, а затем объединить их в новую.
Это работает в большинстве случаев, но есть случаи, когда этот метод не работает. В частности, когда любая из линий имеет форму, подобную букве «С», или точка начала очень близка к конечной точке. Следующие две картинки дают сценарий.
Применяя мой алгоритм, мы получаем результат:
В некотором смысле это понятно, потому что текущий алгоритм просто находит спроецированные точки и извлекает линии.
Мы ожидали что-то вроде этого:
Так что мне нужен более надежный алгоритм, чтобы сделать это, чтобы он мог также обрабатывать особые случаи, как в предыдущем. Я пытался проецировать каждую точку от линии к другой и находить две проецируемые точки, которые ближе всего к точке начала / конца проецируемой линии, но не было удачи. Тем не менее я могу найти случаи, которые дают неожиданные результаты.
Кто-нибудь сталкивался с подобными проблемами раньше? Было бы также хорошо, если бы программное обеспечение или библиотека могли выполнять аналогичную работу. Любой ответ будет оценен.