lingkaran ini memang hanya lingkaran.tapi proses pembuatannya itu yang bikin kepala puyeng.Ini sebenarnya tugas di pemrograma grafik mungkin bisa di jadikan referensi buat teman teman yang sedang membutuhkan.
oke cekidot....
Algoritma mid Point adalah algoritma untuk membuat lingkaran.Jika masih belum begitu faham bisa di baca di Sini.
untuk implementasinya dengan java seperti di bawah ini.Koding berikut bukan full dari koding yang saya buat.Hanya saya masukkan intinya saja supaya anda bisa berkreasi sendiri dengan ide kreatif anda.
public void midpoint(GLAutoDrawable drawable,int radius,int xcenter,int ycenter){//method untuk algoritma midpoint
Lingkaran c = new Lingkaran();
GLCanvas canvas = new GLCanvas();
GL gl = drawable.getGL();
int x1 = 0;
int y1 = radius;
int p = 1 - radius;
c.displ(drawable, x1, y1, xcenter, ycenter);
for(int x=0;x<=y1;x++){
x1+=1;
if (p < 0) {
p += 2 * x1 + 1;
} else {
y1 = y1 - 1;
p += 2 * (x1 - y1) + 1;
}
c.displ(drawable, x1, y1, xcenter, ycenter);
}
}
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -20.0f);
gl.glPointSize(1.5f);
Lingkaran s=new Lingkaran(); s.midpoint(drawable,jari_jari,xtengah,ytengah); b.putus_horisontal(drawable,40,40,40,45);
gl.glEnd();
gl.glFlush();
}
public void displ(GLAutoDrawable drawable,int x1,int y1,int xcenter,int ycenter) {
GL gl = drawable.getGL();
gl.glBegin(GL.GL_POINTS);
gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glVertex2i(xcenter + x1, ycenter + y1);
gl.glVertex2i(xcenter - x1, ycenter + y1);
gl.glVertex2i(xcenter + x1, ycenter - y1);
gl.glVertex2i(xcenter - x1, ycenter - y1);
gl.glVertex2i(xcenter + y1, ycenter + x1);
gl.glVertex2i(xcenter - y1, ycenter + x1);
gl.glVertex2i(xcenter + y1, ycenter - x1);
gl.glVertex2i(xcenter - y1, ycenter - x1);
gl.glEnd();
gl.glFlush();
}
koding di atas merupakan koding utama dari program membuat lingkaran.sebenarnya masih banyak method method lain yang merupakan method bawaan dari JOGL.Berikut ini program yang sudah saya build jadi file jar sehingga bisa langsung di jalankan.Bisa di download Di Sini.
jika di jalankan kurang lebih seperti ini
file tersebut merupakan gabungan dari 3 bangun geometri yaitu garis dengan algoritma bressenham,lingkaran dan elips dengan algoritma Mid Point.Untuk implementasi di Elips seperti kode di bawah ini
public void init(GLAutoDrawable drawable) {//method untuk mengisi nilai
try{// Use debug pipeline
// drawable.setGL(new DebugGL(drawable.getGL()));
String str = JOptionPane.showInputDialog ("Masukkan Lebar Horisontal");
int x=Integer.parseInt(str);
String str1 = JOptionPane.showInputDialog ("Masukkan Lebar Vertikal");
int x1=Integer.parseInt(str1);
String str2 = JOptionPane.showInputDialog ("Masukkan x titik tengah");
int y=Integer.parseInt(str2);
String str3 = JOptionPane.showInputDialog ("Masukkan y titik tengah");
int z=Integer.parseInt(str3);
this.jari_hor=x;
this.jari_ver=x1;
this.xtengah=y;
this.ytengah=z;
GL gl = drawable.getGL();
System.err.println("INIT GL IS: " + gl.getClass().getName());
// Enable VSync
gl.setSwapInterval(1);
// Setup the drawing area and shading mode
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
Elips l=new Elips();
l.init(drawable);
}
}
public void elips(GLAutoDrawable drawable,int Rx,int Ry,int xCentre,int yCentre){//mid point untuk elips
Elips e= new Elips();
GL gl = drawable.getGL();
int p, px, py, x = 0, y = 0, Ry2, Rx2, twoRx2, twoRy2;
Ry2 = Ry * Ry;
Rx2 = Rx * Rx;
twoRy2 = 2 * Ry2;
twoRx2 = 2 * Rx2;
x = 0;
y = Ry;
px = 0;
py = twoRx2 * y;
if ((2*Ry*Ry*x) < (2*Rx*Rx*y)) {
p = (int) Math.round(Ry2 - Rx2 * Ry + (0.25 * Rx2));
e.piksel(drawable, x, y, xCentre, yCentre);
while (px < py){
x++;
px += twoRy2;
if (p<0){
p +=Ry2 + px;
}else{
y --;
py -= twoRx2;
p += Ry2 + px - py;
}
e.piksel(drawable, x, y, xCentre, yCentre);
}
}
p = (int)Math.round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)- Rx2*Ry2);
while (y>0){
y--;
py -=twoRx2;
if ( p > 0){
p += Rx2 - py;
} else {
x++;
px += twoRy2;
p += Ry2 + px - py;
}
e.piksel(drawable, x, y, xCentre, yCentre);
}
}
public void piksel(GLAutoDrawable drawable,int x,int y,int xCentre,int yCentre){//method untuk membangkitkan piksel
GL gl= drawable.getGL();
gl.glBegin(GL.GL_POINTS);
gl.glVertex2i(xCentre+x, yCentre+y);
gl.glVertex2i(xCentre-x, yCentre+y);
gl.glVertex2i(xCentre+x, yCentre-y);
gl.glVertex2i(xCentre-x, yCentre-y);
gl.glEnd();
gl.glFlush();
}
public void display(GLAutoDrawable drawable) {//method yang pertama di jalankan
GL gl = drawable.getGL();
// Clear the drawing area
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
// Reset the current matrix to the "identity"
gl.glLoadIdentity();
gl.glPointSize(2);
// Move the "drawing cursor" around
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
Elips e=new Elips();
e.elips(drawable,jari_hor,jari_ver,xtengah,ytengah );
}
koding di atas memang bukan keseluruhan dari koding yang saya buat.Silahkan berexsperimen dengan ide kreatif anda.saya yakin kita bisa......
Kalau dosen aja bisa...kenapa kita tidak...???
Maju terus programer Indonesia
Jika ada Uneg Uneg bisa disampaikan di kolom komentar terima kasih
0 comments:
Post a Comment