Em nosso sistema, existem os requisitos que queremos mover algumas linhas de origem (com baixa precisão) para linhas de referência (com alta precisão). As figuras a seguir apresentam os casos de uso normais. O vermelho é uma linha de origem e o azul é uma linha de referência.
Nesse caso, a linha de origem seria movida parcialmente e o resultado seria o que a linha verde mostra:
Há situações em que a linha de origem precisa ser movida completamente.
Resultado:
Atualmente, nossa solução é projetar o ponto inicial / final da linha de origem na linha de referência e vice-versa e, em seguida, encontrar pontos projetados na linha de origem e referência. Com esses pontos projetados, podemos extrair a parte necessária da fonte e da linha de referência e depois combiná-las em uma nova.
Isso funciona na maioria dos casos, mas há casos em que esse método não funciona. Especificamente, quando qualquer uma das linhas tem a forma de um "C" ou o ponto da cabeça está muito próximo do ponto final. As próximas duas fotos mostram o cenário.
Aplicando meu algoritmo, obtemos o resultado:
De certa forma, é compreensível porque o algoritmo atual apenas encontra pontos projetados e extrai linhas.
O que esperávamos é algo assim:
Então, o que eu preciso de um algoritmo mais robusto para fazer isso, para que ele também possa lidar com casos especiais como o anterior. Eu tentei projetar todos os pontos de uma linha para outra e encontrar os dois pontos projetados que mais se aproximarem do ponto inicial / final da linha projetada, mas não houve sorte. Ainda posso encontrar casos que dão resultados inesperados.
Alguém já se deparou com problemas semelhantes antes? Seria ótimo também se houver um software ou biblioteca fazer um trabalho semelhante. Qualquer resposta será apreciada.