Dalam sistem kami, ada persyaratan bahwa kami ingin memindahkan beberapa jalur sumber (dengan presisi rendah) ke jalur referensi (dengan presisi tinggi). Gambar-gambar berikut memberikan kasus penggunaan normal. Yang merah adalah garis sumber dan yang biru adalah garis referensi.

Untuk kasus ini, baris sumber akan dipindahkan sebagian, dan hasilnya akan seperti yang ditunjukkan garis hijau:

Ada situasi di mana baris sumber perlu dipindahkan sepenuhnya.

Hasil:

Saat ini solusi kami adalah memproyeksikan titik kepala / akhir dari garis sumber ke garis referensi dan sebaliknya, kemudian menemukan titik yang diproyeksikan pada sumber dan garis referensi. Dengan titik-titik yang diproyeksikan ini, kita dapat mengekstrak bagian yang diperlukan dari sumber dan garis referensi dan kemudian menggabungkannya menjadi yang baru.
Ini berfungsi untuk sebagian besar kasus, tetapi ada kasus bahwa metode ini tidak berfungsi. Khususnya, ketika salah satu garis memiliki bentuk seperti "C" atau titik kepala sangat dekat dengan titik akhir. Dua gambar berikutnya memberikan skenario.

Menerapkan algoritma saya, kami mendapatkan hasilnya:

Bisa dimengerti karena algoritma saat ini hanya menemukan titik yang diproyeksikan dan mengekstrak garis.
Apa yang kami harapkan adalah seperti ini:

Jadi apa yang saya perlukan algoritma yang lebih kuat untuk melakukan ini sehingga juga dapat menangani kasus-kasus khusus seperti yang sebelumnya. Saya telah mencoba untuk memproyeksikan setiap poin dari satu baris ke yang lain dan untuk menemukan dua poin yang diproyeksikan yang paling dekat dengan titik kepala / akhir dari garis yang diproyeksikan, tetapi tidak ada keberuntungan. Saya masih dapat menemukan kasus yang memberikan hasil yang tidak terduga.
Adakah yang pernah mengalami masalah serupa sebelumnya? Akan lebih bagus jika ada perangkat lunak atau perpustakaan yang bisa melakukan pekerjaan serupa. Jawaban apa pun akan dihargai.