Algoritma bresenham merupakan suatu algoritma (pendekatan) yang dikreasikan oleh bresenham yang tidak kalah akurat dan efisien dengan algoritma primitif lainnya (seperti DDA).Pada algoritma bresenham, nilai y kedua dan seterusnya, dihitung dari nilai y sebelumnya, sehingga hanya titik y pertama yang perlu dilakukan operasi secara lengkap.
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)
glPointSize(5)
def plot(x, y):
glBegin(GL_POINTS)
glVertex2f(x, y)
glEnd()
def bresenham_circle_drawing(r):
# fungsi untuk membuat lingksran
x_position = 1
y_position = 1
r = 40 #adalah jari-jari yang ada pada lingkaran
x = 0
y = r
# parameter keputusan
d = 3 - 2 * r
plot(x + x_position, y + y_position) #membuat koordinat titik
while y > x:
if d < 0:
x += 1
d += 4 * x + 6
else:
x += 1
y -= 1
d += (4 * (x - y)) + 10
# Tidak perlu mencari semua nilai koordinat
# cukup dapatkan nilai (x, y) saja
# lalu balik menjadi (y, x)
# Untuk pixel (x, y)
# Quadrant 1
plot(x + x_position, y + y_position)
# Quadrant 2
plot(x + x_position, -y + y_position)
# Quadrant 3
plot(-x + x_position, -y + y_position)
# Quadrant 4
plot(-x + x_position, y + y_position)
# Untuk pixel (y, x)
# Quadrant 1
plot(y + x_position, x + y_position)
# Quadrant 2
plot(-y + x_position, x + y_position)
# Quadrant 3
plot(-y + x_position, -x + y_position)
# Quadrant 4
plot(y + x_position, -x + y_position)
def plotpoints():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0.75, 0.6, 1.0) #UNTUK MENENTUKAN WARNA GARIS
glBegin(GL_LINES)
#koordinat diagram x, y
glVertex2f(-100, 0)
glVertex2f(100, 0)
glVertex2f(0, -100)
glVertex2f(0, 100)
glEnd()
bresenham_circle_drawing(40)
glFlush()
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(500, 500)
glutInitWindowPosition(100, 100)
glutCreateWindow("Bresenham Circle Drawing Algoritm")
glutDisplayFunc(plotpoints)
init()
glutMainLoop()
Berikut hasil outputnya :
Komentar
Posting Komentar