Nel nostro sistema, ci sono i requisiti che vogliamo spostare alcune linee di origine (con bassa precisione) su linee di riferimento (con alta precisione). Le immagini seguenti mostrano i normali casi d'uso. Quello rosso è una linea di origine e quello blu è una linea di riferimento.
In questo caso, la linea di origine verrebbe spostata parzialmente e il risultato sarebbe come mostrato dalla linea verde:
Ci sono situazioni in cui è necessario spostare completamente la linea di origine.
Risultato:
Attualmente la nostra soluzione è proiettare il punto di testa / fine della linea di origine sulla linea di riferimento e viceversa, quindi trovare punti proiettati sulla linea di origine e di riferimento. Con questi punti proiettati, possiamo estrarre la parte necessaria della sorgente e della linea di riferimento e poi combinarli in uno nuovo.
Questo funziona nella maggior parte dei casi, ma ci sono casi in cui questo metodo non funziona. In particolare, quando una delle linee ha una forma simile a "C" o il punto della testa è molto vicino al punto finale. Le prossime due immagini danno lo scenario.
Applicando il mio algoritmo, otteniamo il risultato:
In un certo senso è comprensibile perché l'algoritmo corrente trova solo punti proiettati ed estrae linee.
Quello che ci aspettavamo è qualcosa del genere:
Quindi quello di cui ho bisogno è un algoritmo più robusto per farlo in modo che possa gestire anche casi speciali come quello precedente. Ho cercato di proiettare tutti i punti da una linea all'altra e di trovare i due punti proiettati più vicini al punto principale / finale della linea proiettata, ma non c'è stata fortuna. Posso ancora trovare casi che danno risultati inaspettati.
Qualcuno ha riscontrato problemi simili prima? Sarebbe anche bello se ci fosse un software o una libreria in grado di fare un lavoro simile. Ogni risposta sarà apprezzata.