Membelah kurva Bezier menjadi dua bagian pada beberapa parameter t
mudah berkat algoritma De Casteljau .
Apakah ada algoritma yang serupa untuk kurva NURBS? Bagaimana cara membagi kurva NURBS?
Membelah kurva Bezier menjadi dua bagian pada beberapa parameter t
mudah berkat algoritma De Casteljau .
Apakah ada algoritma yang serupa untuk kurva NURBS? Bagaimana cara membagi kurva NURBS?
Jawaban:
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.