PERMUKAAN B-SPLINE TENSOR PRODUCT
7.1 Kelas-Kelas Utama
Karena Java merupakan bahasa pemrograman yang berorientasikan objek, maka dalam pengkodeannya dibangun kelas-kelas yang dapat merepresentasikan objek yang diperlukan. Berikut ini adalah kelas-kelas utama beserta atribut pentingnya.
1. ControlPoint
Objek dari kelas ini merepresentasikan titik kontrol kurva B-spline. Atribut dari objek ini adalah x dan y. Nilai-nilai ini merupakan lokasi titik kontrol pada layar.
Data member:
Nama Tipe/Kelas Keterangan
x int Koordinat x pada layar
y int Koordinat y pada layar
Method:
Nama Argumen Keterangan
changeCP int newX, int newY Melakukan perubahan
nilai koordinat x dan y
2. BSpline
Objek ini merepresentasikan kurva B-spline. Kurva B-spline tentunya memiliki derajat, vektor titik kontrol, dan vektor knot. Dalam implementasi pada program, kumpulan titik kontrol dan knot akan menggunakan struktur data ArrayList. Dengan demikian, manipulasi data titik kontrol dan knot dapat dengan mudah dilakukan.
Data member:
Nama Tipe/Kelas Keterangan
d int Derajat kurva B-spline
controlPoints ArrayList
ControlPoint
Vektor titik-titik kontrol kurva B-spline
t ArrayList Double Vektor knot yang
digunakan
Method:
Nama Argumen Keterangan
setDegree int newDegree Mengubah derajat kurva
addPoint int x, int y Menambah titik kontrol
insertPoint int index, int x, int y
Menyisipkan titik kontrol
deletePoint int index Menghapus titik kontrol
changeCP int index,
int newX, int newY
Mengubah nilai suatu titik kontrol
drawCurve Graphics2D g Menghitung sekaligus menggambar titik kurva dengan menggunakan algoritma de Boor
insertKnot int index,
double value
Melakukan proses penyisipan knot
deleteKnot int index Menghapus nilai knot
multiplyKnot int index Menggandakan nilai knot
changeKnot int index,
double newValue
Mengubah nilai suatu knot
changeKnotsSequence double start, double newInterval
Memodifikasi nilai default knot seragam
raiseDegree void Melakukan proses
peningkatan derajat
closeSpline void Membentuk kurva closed
Implementasi:
Method Algoritma
drawCurve (Graphics2D g)
vektor titik kontrol : V vektor knot : u derajat : d
// jumlah_V adalah banyaknya titik kontrol for(n = 0; n < jumlah_V – d; n++){
(int index, double value)
vektor titik kontrol lama : V vektor titik kontrol baru : W vektor knot : u
derajat : d
1. u.insert(index, value);
2. for(i = 0; i < jumlah_V + 1; i++){
3. BSplines
Objek ini mempunyai struktur data ArrayList yang berisi kumpulan dari objek-objek bspline. Ini dimaksudkan supaya program editor dapat memanipulasi multi kurva B-spline.
Data member:
Nama Tipe/Kelas Keterangan
bsplines ArrayList Kumpulan kurva-kurva
B-spline
bspline BSpline Kurva B-spline yang
sedang aktif (dipilih) raiseDegree() vektor titik kontrol mula-mula : V
vektor knot mula-mula : u derajat : d
kumpulan titik kontrol baru : Z vektor knot baru : v
1. Simpan V pada Hashtable dengan label blossom sebagai kuncinya.
2. Lakukan penyisipan knot sehingga multiplisitas tiap knot bertambah satu. Titik-titik kontrol hasil penyisipan knot tersebut dinamakan Wdan vektor knot baru sekarang adalah v.
3. Simpan kembali W pada Hashtable dengan label blossom sebagai kuncinya.
4. for(j = 0; j< jumlah_v – d; j++){
label blossom yang telah menjadi kunci untuk mendapatkan titik kontrol pada Hashtable.
Method:
Nama Argumen Keterangan
addSpline BSpline spline Menambah kurva
B-spline
duplicateSpline BSpline spline Menambah kurva B-spline yang identik sama dengan spline
removeSpline void Menghapus kurva
B-spline yang sedang aktif
clone Object bsplines Membuat duplikasi dari
objek ini
4. Transformasi2D
Kelas ini menyediakan fungsi-fungsi untuk melakukan transformasi affine pada kurva B-spline. Dengan fungsi dari kelas ini, suatu kurva B-spline dapat diputar, digeser, diperbesar atau diperkecil, direfleksikan horizontal maupun vertikal. Transformasi affine hanya perlu dilakukan pada titik-titik kontrolnya saja karena kurva B-spline memiliki karakteristik affine invariance.
Data member:
Nama Tipe/Kelas Keterangan
bspline BSpline Kurva B-spline yang
akan dikenakan transformasi
Method:
Nama Argumen Keterangan
moveTo int newX,
int newY
Melakukan proses translasi ke titik baru
rotate double angle,
int centerX, int centerY
Melakukan proses rotasi sebesar angle dari pusat
scale int centerX,
int centerY, double m
Melakukan proses dilatasi sebesar m
reflectX void Melakukan flip
horizontal
reflectY void Melakukan flip vertikal
5. BSplineSurface
Objek ini merepresentasikan permukaan B-spline tensor product. Pertama kali objek ini dibentuk dari dua kurva B-spline. Masing-masing kurva memiliki arah sumbu yang saling tegak lurus. Jadi untuk membentuk satu permukaan B-spline tensor product, terlebih dahulu kita tentukan satu kurva untuk arah u dan satu kurva lagi untuk arah v. Dalam program editor ini, kurva untuk arah v hanya diperbolehkan berupa garis lurus. Ini dimaksudkan untuk mempermudah perancangan jaring-jaring titik kontrol dari kedua kurva yang akan membentuk permukaan. Pengguna harus terlebih dahulu menggambar satu kurva arah u.
Kurva inilah yang nantinya menjadi permukaan B-spline karena akan digeser mengikuti arah kurva v. Setelah pengguna menentukan kurva arah u dan arah v, jaring titik kontrol akan secara otomatis terbentuk. Pembentukan jaring-jaring titik kontrol secara otomatis memudahkan pengguna program editor dalam merancang permukaan B-spline. Setelah permukaan B-spline ditampilkan, pengguna dapat menggeser-geser titik kontrol sebebas mungkin hingga mendapatkan bentuk yang diinginkan. Perhatikan contoh berikut.
Gambar 7.1 Kurva B-spline yang akan membentuk permukaan B-spline tensor product.
Gambar 7.2 Permukaan B-spline tensor product yang dibentuk dari kurva B-spline pada gambar 7.1.
Jaring-jaring titik kontrol untuk permukaan B-spline didapat dari penggeseran titik-titik kontrol untuk kurva arah u mengikuti titik-titik kontrol untuk kurva arah v.
Data member:
Nama Tipe/Kelas Keterangan
d1 int Derajat kurva B-spline
untuk arah u
d2 int Derajat kurva B-spline
untuk arah v
u ArrayList Double Vektor knot untuk kurva
B-spline arah u
v ArrayList Double Vektor knot untuk kurva
B-spline arah v
meshControlPoints Vector3f[][] Titik-titik kontrol
permukaan B-spline
Method:
Nama Argumen Keterangan
findSurfacePoints void Mencari titik-titik
permukaan dengan menerapkan dua kali algoritma de Boor
editKnot int direction,
int index,
double newValue
Mengubah suatu nilai knot pada vektor knot
editMeshControlPoints int row, int col, float newX, float newY, float newZ
Mengubah posisi koordinat suatu titik kontrol
Implementasi:
Method Algoritma
findSurfacePoints() jaring-jaring titik kontrol : V vektor knot kurva u: u vektor knot kurva v: v derajat kurva u: du derajat kurva v: dv
kumpulan titik-titik permukaan B-spline : W
//jumlah_kolom_V adalah banyak jumlah kolom jaring-jaring //titik kontrol
while(tv<vm+dv){