Saya memiliki 3 simpul yang (V1, V2, V3)
dipilih secara acak pada mesh segitiga biasa. Untuk 3 simpul ini, saya telah menghitung jarak geodesik dan jalur (dengan menggunakan Dijkstra) di antara mereka dan membentuk permukaan seperti segitiga seperti pada gambar di atas.
Sekarang, saya memiliki simpul yang terletak di setiap jalur dan dapat menghitung jarak geodesik dari titik tertentu.
Yang ingin saya lakukan adalah mendapatkan simpul atau segitiga yang terletak di area seperti segitiga. Bagaimana saya bisa melakukan ini?
mesh
triangulation
mkocabas
sumber
sumber
Jawaban:
Ada metode alternatif yang mengandalkan pengisian banjir. Pertama-tama, atur data tepi Anda menjadi loop di mana ujung-ujungnya membentuk loop berlawanan arah jarum jam. Kemudian mulailah dari titik arbitrer pada loop dan pilih tepi yang menghubungkan titik tersebut. Gunakan tepi batas keluar dan silangkan dengan tepi keluar lainnya, jika itu menunjuk ke arah wajah normal maka itu adalah tepi yang akan dimasukkan, jika tidak membuangnya. Dari tepi ini terus sampai Anda mencapai tepi batas, pada titik mana Anda mengakhiri isian. Lanjutkan di vertex tepi batas yang belum dikunjungi.
sumber
Saya sudah berkomentar tentang penggunaan mengisi banjir dan bagaimana akan lebih baik karena lebih fleksibel tetapi solusi lain yang mungkin adalah scanline. (Saya katakan mungkin karena itu membuat banyak asumsi tentang geometri Anda tetapi untuk himpunan tertentu yang ditampilkan dan banyak yang serupa itu akan berhasil.)
Sebagai contoh Anda dengan 3 poin: Temukan vertex persimpangan dari segmen v1, v2 dan garis di mana v3 terletak. (Titik ke kiri atas v2) Kami akan memanggil titik ini v4.
Ini disebut scanline karena (pada gambar di atas) Anda turun garis merah dan hijau secara bersamaan dan kemudian garis merah dan biru secara bersamaan memindai garis saat Anda pergi.
Solusi ini akan sangat cepat jika ada pola indeks, yang sering terjadi. Kalau tidak, perhitungan akan diperlukan untuk menentukan titik tetangga yang terletak di garis.
Lucunya adalah scanline, pengujian barycentric (dalam kotak pembatas segitiga), dan mengisi banjir adalah semua cara menggambar segitiga dalam rendering 3d.
sumber
Saya pikir Anda dapat menghitung beberapa koordinat barikentrik permukaan-terikat untuk setiap titik di permukaan, dan kemudian menggunakannya untuk memeriksa di dalam atau di luar segitiga.
Saya tidak memiliki algoritma yang tepat di tangan tetapi saya menemukan makalah berikut ini yang tampaknya menangani persis koordinat semacam ini.
Barycentric Coordinates On Surface
sumber