Langsung ke konten utama

Membuat Lingkaran Menggunakan Algoritma Bresenham

Hai semua, kembali lagi dengan saya, kali ini saya akan memberitahu tentang bagaimana cara membuat lingkaran menggunakan algoritma Bresenham. Nah disini saya beri langkah-langkah beserta contoh source code.

Langkah-langkah :
1. Menetapkan titik tengah (x_center, y_center)
2. Menetapkan jari-jari r
3. Menetapkan nilai x = 0, y = r
4. Menetepkan nilai parameter keputusan d = 3 – (2 * r)
5. Gambar titik awal dengan koordinat (x_center+x, y_center+y)
6. x = x+1
7. Jika d < 0, maka nilai d baru d = d + (4*x) + 6, jika tidak nilai d baru d =
    d + 4 * (x – y) + 10 dan y = y-1
8. Gambar titik berikutnya dengan koordinat (x_center+x, y_center+y)
9. Jika x < = y ulangi langkah 6 sampai 8

Contoh Source Code :
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def init():
glClearColor(0.0, 0.0, 0.0, 0.0)
gluOrtho2D(-100.0, 100.0, -100.0, 100.0)
glBegin(GL_POINTS)
glPointSize(5) def plot(x, y): glVertex2f(x, y)
# lokasi lingkaran yang akan dibuat
glEnd() def bresenham_circle_drawing(r): x_position = 4
# membuat sebuah titik pada koordinat yang ditentukan
y_position = 4 r = 9 x = 0 y = r # decision parameter d = 3 - 2 * r
x += 1
plot(x + x_position, y + y_position) while y > x: if d < 0: d += 4 * x + 6 else:
# Tidak perlu mencari semua nilai koordinat
x += 1 y -= 1 d += (4 * (x - y)) + 10 # cukup dapatkan nilai (x, y) saja
plot(x + x_position, y + y_position)
# lalu balik menjadi (y, x) # Untuk pixel (x, y) # Koordinat 1 # Koordinat 2
plot(-x + x_position, y + y_position)
plot(x + x_position, -y + y_position) # Koordinat 3 plot(-x + x_position, -y + y_position) # Koordinat 4
plot(-y + x_position, x + y_position)
# Untuk pixel (y, x) # Koordinat 1 plot(y + x_position, x + y_position) # Koordinat 2 # Koordinat 3
glClear(GL_COLOR_BUFFER_BIT)
plot(-y + x_position, -x + y_position) # Koordinat 4 plot(y + x_position, -x + y_position) def plotpoints(): glColor3f(1, 1.0, 1.0)
glutInit(sys.argv)
glBegin(GL_LINES) glVertex2f(-100, 0) glVertex2f(100, 0) glVertex2f(0, -100) glVertex2f(0, 100) glEnd() bresenham_circle_drawing(40) glFlush() def main():
glutCreateWindow("Lingkaran Algoritma Bresenham Kel 3")
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) glutInitWindowSize(500, 500) glutInitWindowPosition(100, 100) glutDisplayFunc(plotpoints) init() glutMainLoop()
main()


Diatas ini adalah output dari source code yang saya beri tadi. Sekian sedikit ilmu yang dapat saya sampaikan, semoga bermaanfaat.

Komentar

Postingan populer dari blog ini

Event Handling Mouse dan Keyboard pada PyOpenGL

Hai teman-teman, kali ini saya akan memberi contoh penerapan Event Handling pada Mouse dan Keyboard. Langsung simak saja ya. OpenGL menyediakan fungsi yang didefinisikan oleh user dan dipanggil pada saat ada event yang bersesuaian. OpenGL memonitor peralatan input, ketika ada sesuatu yang terjadi,misalkan saat mouse down , key press , dan lain-lain. Pada OpenGL terdapat fungsi Callback GLUT, yaitu fungsi yang berjalan saat ada kejadian (event-driven). Program-program yang menggunakan window untuk input/output,menunggu sampai ada kejadian dan kemudian mengeksekusi beberapa fungsi yang didefinisikan sebelumnya berdasarkan input dari user. Kejadian yang dimaksud : key press, mouse button press dan release, window resize , dan lain-lain. Program OpenGL yang dibuat akan berjalan tak terbatas ( infinite loop ). EVENT KEYBOARD glutKeyboardFunc(nama_fungsi) def nama_fungsi(key, x, y) Fungsi ini mencatat apa yang terjadi ketika sebuah tombol keyboard di tekan. Parameter key me...

Membuat Objek Roket dengan Fungsi Event Handling Pada Keyborad Menggunakan PyOpenGL

Hai teman-teman, saya akan memberikan contoh lain untuk event handling pada keyboard . Kali ini dengan objek roket yang saya buat dengan sangat sederhana. Langsung saja menuju source code dan hasilnya. Source Code lengkap : from OpenGLContext import testingcontext from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * # Koordinat x dan y untuk posisi roket pos_x = 0 pos_y = 0 # Teks Warna Objek warna_objek = "Hitam" # Teks Warna Background warna_background = "Hitam" def init(): glClearColor(0.0, 0.0, 0.0, 1.0) gluOrtho2D(-500.0, 500.0, -500.0, 500.0) def drawBitmapText(string,x,y,z) : glRasterPos3f(x,y,z) for c in string : glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,ord(c)) def reshape(w, h): glViewport(0,0,w,h) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluOrtho2D(0,w,h,0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() def drawText(): glColor3f(1.0,1.0,0.0) drawBitmapText(...