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.
Jawaban:
Perkiraan saya adalah bahwa kasus akhir sering menjadi pengecualian yang tidak dapat diprogram dengan mesin. Saya bekerja dengan masalah yang sama dan mereka selalu membutuhkan sejumlah pengeditan manual. Yang perlu Anda sesuaikan adalah pengecualian yang diproduksi oleh kasing dan sajikan dalam sistem manajemen kerja kepada pengguna akhir.
sumber
Anda akan memerlukan toleransi sekejap dan toleransi belokan untuk algoritma ini (saya berasumsi Anda sudah memiliki toleransi sekejap).
Proyeksikan titik kepala dari garis sumber ke garis referensi. Hancurkan garis referensi pada titik yang diproyeksikan ini.
Lintasi garis sumber dari titik kepala ke titik pertama untuk mendapatkan arah perjalanan di sepanjang garis sumber. Lintasi masing-masing dari dua garis referensi Anda dari titik sumber yang diproyeksikan ke titik berikutnya. Jika arah perjalanan berada dalam toleransi belokan arah perjalanan dari titik kepala di jalur sumber Anda, maka terapkan algoritma Anda secara normal, tetapi hanya menggunakan bagian jalur referensi tersebut. Jika algoritma mencapai akhir baris sumber, Anda selesai. Jika tidak, pecahkan garis sumber antara bagian yang ditransformasi dan bagian yang tidak diubah (yang akan mencakup titik akhir).
Sekarang ambil bagian yang tidak diubah dan proyeksikan titik akhir ke garis referensi asli. Lakukan prosedur yang sama seperti sebelumnya ... melintasi sumber dari titik akhir ke titik pertama untuk menemukan arah perjalanan. Hancurkan garis referensi pada titik akhir proyek dan lintasi masing-masing untuk menemukan apakah arah perjalanan dari titik akhir yang diproyeksikan berada dalam toleransi belokan. Jika demikian, gunakan potongan garis referensi untuk menerapkan algoritma secara normal.
Ingat, pada titik ini Anda hanya menggunakan bagian yang tidak diubah, sehingga Anda tidak akan tumpang tindih dengan transformasi titik kepala.
Akhirnya, gabungkan dua potongan garis yang dihasilkan jika perlu: titik kepala mengubah potongan dari titik kepala yang diproyeksikan ke titik istirahat yang tidak diubah dan kemudian pada titik akhir potongan yang ditransformasi dari titik istirahat yang tidak diubah ke titik akhir yang diproyeksikan.
sumber