Selasa, 24 Maret 2020

Algoritma Bresenham Pembentukan Lingkaran


Algoritma Pembentukan Lingkaran
Algoritma Pembentukan Lingkaran adalah algoritma dimana pembentukan garis lingkaran berdasarkan acuan titik tengah lingkaran. Lingkaran adalah kumpulan dari titik-titik yang memiliki jarak dari titik pusat yang sama untuk semua titik. Lingkaran dibuat dengan menggambarkan seperempat lingkaran, karena bagian lain dapat dibuat sebagai bagian yang simetris.
Algoritma garis Bressenhem disebut juga midpoint line algorithm yang adalah algoritma konversi penambahan nilai integer yang juga dapat diadaptasi untuk menggambar sebuah lingkaran. Untuk menggambar sebuah lingkaran 360 derajat kita akan membagi menjadi 8 bagian, sehingga kita cukup hanya menggambar 45 derajat.

Langkah-langkah Algoritma Bresenham Pembentukan Lingkaran :
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
Tugas Individu 29
1.      Buat gambar lingkaran menggunakan titik dengan algoritma Bresenham Pembentukan Lingkaran.
2.      Nilai parameter :
Kelompok
Center
R
MM3K1
(-2, -2)
8

Jawab :
Untuk membuat algoritma Bresenham Pembentukan Lingkaran maka harus ada dilakukan langkah-langkah sebagai berikut :
1.      Menetapkan titik tengah (x_center, y_center) : (-2, -2)
2.      Menetapkan jari-jari r : 8
3.      Menetapkan nilai x = 0, y = r : (x=0, y=8)
4.      Menetepkan nilai parameter keputusan d = 3 – (2 * r) : d = 3 – (2*8)
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

Berikut adalah source code lengkapnya :
# Kelompok 1 Grafika Komputer MM-3
# Nama Anggota:
# -> Tri Mega Anggraeni
# -> Alma Alfiatul Inayah
# -> Bunga Permatasari
# -> Sarah Nur Jihan
# -> Wiwit Farianto

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)
    glPointSize(5)


def plot(x, y):
    glBegin(GL_POINTS)
    glVertex2f(x, y)
    glEnd()


def bresenham_drawing_circle(r):

    # titik lokasi lingkaran yang akan dibuat

    x_center = -2
    y_center = -2

    r = 8
    x = 0
    y = r

    # parameter brasenham circle
    d = 3 - 2 * r

    # membuat titik pada koordinat circle yang ditentukan
    plot(x + x_center, y + y_center)

    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 dari koordinat koordinat
        # cukup mendapatkan nilai dari(x, y)
        # setelah sudah nilai (x,y) lalu balik menjadi (y, x)

        # Untuk pixel (x, y)

        # Quadrant 1
        plot(x + x_center, y + y_center)

        # Quadrant 2
        plot(x + x_center, -y + y_center)

        # Quadrant 3
        plot(-x + x_center, -y + y_center)

        # Quadrant 4
        plot(-x + x_center, y + y_center)

        # Untuk pixel (y, x)

        # Quadrant 1
        plot(y + x_center, x + y_center)

        # Quadrant 2
        plot(-y + x_center, x + y_center)

        # Quadrant 3
        plot(-y + x_center, -x + y_center)

        # Quadrant 4
        plot(y + x_center, -x + y_center)


def plotpoints():

    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1, 1.0, 1.0)

    glBegin(GL_LINES)

    glVertex2f(-100, 0)
    glVertex2f(100, 0)

    glVertex2f(0, -100)
    glVertex2f(0, 100)

    glEnd()

    bresenham_drawing_circle(40)

    glFlush()


def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
    glutInitWindowSize(500, 500)
    glutInitWindowPosition(100, 100)
    glutCreateWindow("Bresenham Cricle TUGAS 4 Kel 1 MM3")
    glutDisplayFunc(plotpoints)

    init()
    glutMainLoop()


main()
Output :



Tidak ada komentar:

Posting Komentar