У нашій системі є вимоги, згідно з якими ми хочемо перемістити деякі вихідні лінії (з низькою точністю) до опорних ліній (з високою точністю). На наступних фотографіях наведено звичайні випадки використання. Червона - це вихідна лінія, а синя - опорна.
У цьому випадку рядок джерела буде переміщений частково, а результат буде таким, як показує зелена лінія:
Існують ситуації, що вихідну лінію потрібно повністю перемістити.
Результат:
В даний час наше рішення полягає в тому, щоб проектувати головну / кінцеву точку вихідної лінії на опорну лінію і навпаки, а потім знаходити прогнозовані точки на джерело та опорну лінію. За допомогою цих проектованих точок ми можемо витягти потрібну частину вихідного та опорного рядка, а потім об'єднати їх у нову.
Це працює в більшості випадків, але є випадки, коли цей метод не працює. Зокрема, коли будь-яка з рядків має форму "C" у формі, або точка голови дуже близька до кінцевої точки. Наступні дві картини дають сценарій.
Застосовуючи мій алгоритм, ми отримуємо результат:
Певним чином це зрозуміло, оскільки поточний алгоритм просто знаходить прогнозовані точки та витягує рядки.
Ми очікували приблизно такого:
Отже, для цього мені потрібен більш надійний алгоритм, щоб він також міг обробляти особливі випадки, як попередній. Я намагався спроектувати кожну точку від прямої до іншої та знайти дві проектовані точки, які є найближчими до головної / кінцевої точки проектованої лінії, але не пощастило. Ще я можу знайти випадки, які дають несподівані результати.
Хтось раніше стикався з подібними проблемами? Було б також чудово, якщо програмне забезпечення чи бібліотека можуть виконати подібну роботу. Будь-яка відповідь буде вдячна.