Sunday, 30 October 2016

Algoritma Bresenham (Komputer Grafik)

Apa itu Algoritma Bresenham ?

       Algoritma garis Bresenhem adalah algoritma konversi penambahan nilai integer.Langkah-langkah untuk membentuk garis menurut algoritma ini adalah :

1. Tentukan Titik Awal dan Akhir ;
    Titik Awal  (x1 , y1)
    Titik Akhir (x2 , y2)

2. Nilai Pengubahan posisi (P)
    P Awal = (2 * Dy) - Dx
    a. Kondisi 1 : Jika P< 0, Maka x = x + 1,Y tetap P selanjutnya adalah P = P + (2 * Dy)
    b. Kondisi 2 : Jika  P> 0 Maka x = x + 1,Y = Y + 1 P selanjutnya adalah P = P + 2* (Dy - Dx)

        Baiklah,,... Berdasarkan rumus di atas maka dapat diimplementasikan dalam suatu bentuk program, disini pembuatan codingnya menggunakan Microsoft Visual Studio dengan bahasa C
Berikut Contoh Source codenya beserta penjelasannya ;
//Algoritma Bresenham

#include <GL\freeglut.h>
#include <GL\glut.h>
#include <iostream>

using namespace std;

//identifier fungsi
void init();
void display(void);
void bresenham(void);

//  posisi window di layar
int window_x;
int window_y;

//  ukuran window
int window_width = 720;
int window_height = 480;

//  judul window
char *judul_window = "Algoritma Bresenham";

void main(int argc, char **argv)
{
//  inisialisasi GLUT (OpenGL Utility Toolkit)
glutInit(&argc, argv);
// set posisi window supaya berada di tengah
window_x = (glutGet(GLUT_SCREEN_WIDTH) - window_width) / 2;
window_y = (glutGet(GLUT_SCREEN_HEIGHT) - window_height) / 2;
glutInitWindowSize(window_width, window_height); //set ukuran window
glutInitWindowPosition(window_x, window_y); //set posisi window

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); // set display RGB dan double buffer
glutCreateWindow(judul_window); //set judul window


init(); //jalankan fungsi init
glutDisplayFunc(display); //  set fungsi display
glutMainLoop(); // set loop pemrosesan GLUT
}

void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0); //set warna background
glColor3f(6.0, .0, 6.0); //set warna titik
glPointSize(2.0); //set ukuran titik
glMatrixMode(GL_PROJECTION); //set mode matriks yang digunakan
glLoadIdentity(); // load matriks identitas
gluOrtho2D(0.0, 800.0, 0.0, 600.0); // set ukuran viewing window
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); //clear color
bresenham(); //jalankan fungsi bresenham
glutSwapBuffers(); //swap buffer
}

void bresenham(void) {
int x1, y1, x2, y2, x, y, dx, dy, xend, p, duady, duadydx;
//tentukan titik awal dan akhir
x1 = 10;
y1 = 10;
x2 = 500;
y2 = 400;
x = x1;
y = y1;

//hitung dx dan dy
dx = abs(x2 - x1);
dy = abs(y2 - y1);

//hitung p
p = 2 * dy - dx;
duady = 2 * dy;
duadydx = 2 * (dy - dx);

//tentukan titik awal dan akhir
if (x1 > x2) {
x = x2;
y = y2;
xend = x1;
}
else
{
x = x1;
y = y1;
xend = x2;
}

//gambar titik awal
glBegin(GL_POINTS);
glVertex2i(x, y);

//perulangan untuk menggambar titik-titik
while (x < xend) {
x++;
if (p < 0) {
p += duady;
}
else
{
if (y1 > y2) {
y--;
}
else y++;

p += duadydx;
}
glVertex2i(x, y);
}

glEnd();
glFlush();
}

Hasil running programnya ;



    Choose :
  • OR
  • To comment
No comments:
Write comments