Pemisahan kurva NURBS

8

Membelah kurva Bezier menjadi dua bagian pada beberapa parameter tmudah berkat algoritma De Casteljau .

Apakah ada algoritma yang serupa untuk kurva NURBS? Bagaimana cara membagi kurva NURBS?

Ecir Hana
sumber
Saya tidak tahu apakah itu akan melakukan hal yang sama, tetapi algoritma De Boor adalah setara dengan De Casteljeau. Menariknya, saya tahu Anda dapat menggunakan algoritma De Boor untuk membagi NURBS atau b-spline menjadi kurva Bezier yang terpisah.
Alan Wolfe

Jawaban:

5

Cara kurva NURBS biasanya dipisah pada titik arbitrer adalah dengan penyisipan simpul . Anda memasukkan simpul pada titik perpecahan sampai pada multiplisitas maksimum, pada titik mana Anda bisa membaca dari dua kurva perpecahan.

Namun, Anda mungkin tidak ingin berpisah pada titik arbitrer. Jika tujuan utamanya adalah menggambar kurva atau sesuatu seperti itu, maka ada baiknya memecah kurva pada titik simpul yang ada (yaitu, melakukan penyisipan simpul sampai semua simpul mencapai multiplisitas maksimum) daripada memasukkan yang baru.

Proses ini membagi NURBS menjadi B-spline rasional yang seragam . Setelah Anda memilikinya, Anda dapat menggunakan algoritma de Boor untuk membagi lebih lanjut.

Jumlah simpul dalam vektor simpul adalah:

numKnots = degreeOfCurve + numControlPoints + 1

atau jika Anda lebih suka:

numKnots = orderOfCurve + numControlPoints

Memasukkan simpul dengan demikian meningkatkan jumlah titik kontrol per satu.

Saat Anda melakukan perjalanan sepanjang kurva NURBS, masing-masing simpul mewakili tempat di mana satu titik kontrol "jatuh" dan yang lain "masuk". Jika nilai simpul diulang, ini berarti bahwa lebih dari satu titik kontrol diganti di tempat ini.

Untuk kurva dengan derajat lebih besar dari 1, simpul dan terakhir diulang berkali-kali untuk satu alasan sederhana: Anda perlu memasukkan lebih dari satu titik untuk memulai dan Anda harus mengeluarkan lebih dari satu titik ke ujung.

Mari kita pikirkan kurva kubik untuk saat ini, hanya untuk menjaga hal-hal sederhana.

Kurva dengan vektor simpul [0,0,1,1] adalah kurva B-spline yang seragam.

Kurva dengan vektor simpul [0,0,1,1,2,2] tidak seragam, tetapi dapat dianggap sebagai dua kurva B-spline seragam yang terhubung pada t = 1, satu yang sesuai dengan [0,0 , 1,1] dan satu yang sesuai dengan [1,1,2,2]. Anda dapat melakukan ini karena banyaknya simpul cukup untuk "memulai" dan "mengakhiri" kurva kubik.

Jika Anda dihadapkan dengan kurva dengan vektor simpul seperti [0,0,1,2,2], Anda dapat memasukkan simpul pada 1 tanpa mengubah bentuk kurva (ini adalah prosedur penyisipan simpul). Ini meningkatkan jumlah titik kontrol per satu; prosedur penyisipan simpul menyesuaikan titik-titik di sekitar simpul baru untuk menampungnya. Tetapi begitu Anda selesai melakukannya, Anda memiliki dua kurva B-spline yang seragam.

Penyisipan simpul tidak akan membuat titik kontrol yang tumpang tindih kecuali jika Anda memasukkan terlalu banyak simpul di tempat yang sama, dan dengan "terlalu banyak", maksud saya tingkat kurva. Jadi untuk kurva kubik yang tidak seragam, Anda akan memasukkan simpul sehingga setiap simpul memiliki multiplisitas 2. Itu memberi Anda sejumlah kurva kubik seragam yang berbatasan, yang kemudian dapat Anda gunakan algoritma de Boor untuk membagi lebih lanjut.

Nama samaran
sumber
Maaf saya sangat baru di NURBS: apa yang Anda maksud dengan "multiplisitas maksimum"? Maksud saya, ketika saya melakukannya dengan cara sebelumnya, apakah saya berakhir dengan beberapa titik kontrol yang tumpang tindih?
Ecir Hana
Biarkan saya mencoba menjelaskan dalam jawabannya.
Nama samaran
1
Nama samaran tidak erot simpul yang baik untuk menunjukkan ini. Saya melihat bahwa saya mungkin perlu memperluas posting lainnya. Meskipun @EcirHana mungkin ide yang bagus untuk bertanya apa itu multilicity.
joojaa
Anda mungkin benar tentang @joojaa itu.
Nama samaran