Rabu, 10 Oktober 2012

Penerapan Algoritma Naif1, Naif2, DDA, Midpoint line di visual studio 2008

Sekedar sharing buat teman-teman mahasiswa, dan juga buat dokumentasi. Siapa tahu dibutuhkan suatu saat...
 // AhmadFadlyDzilJalal_2010470121_KG2.cpp : Defines the entry point for the console application. //
 #include "stdafx.h"
#include <glut.h>
GLuint global_w=800;
 GLuint global_h=600; 
 void init(); 
void display();
void reshape(int w,int h);
 void AlgoritmaNaif1(int x1,int y1,int x2,int y2); 
void AlgoritmaNaif2(int x1,int y1,int x2,int y2); 
void AlgoritmaDDA (int x1,int y1,int x2,int y2); 
void MidPoint (int x1,int y1,int x2,int y2); 

 int _tmain(int argc, char* argv[]) 
          { glutInit(&argc,argv ); 
          glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); 
          glutInitWindowPosition(50,50); 
          glutInitWindowSize(global_w,global_h);
          glutCreateWindow ("Tugas"); 
          glutSetWindowTitle( "Garis Dengan Algoritma Naif 1 & 2 & DDA" ); 
          init(); 
          glutDisplayFunc(display); 
          glutReshapeFunc(reshape); 
          glutMainLoop(); return 0; } 
void reshape(int w,int h) 
{ global_w=w; 
   global_h=h; 
         glViewport(0,0,(GLsizei)w,(GLsizei)h);
         glMatrixMode(GL_PROJECTION); 
         glLoadIdentity(); 
         gluOrtho2D(0,w,0,h); 
         glMatrixMode(GL_MODELVIEW); 
         glLoadIdentity(); glScalef(1,1,1); 
         glutPostRedisplay(); } 
 void init() 
  { glClearColor(0.3,0.5,0.5,1);
     glShadeModel(GL_3D); }

 void display() 
{ glClear(GL_COLOR_BUFFER_BIT); 
 glColor3f(1,1,0);//glPointSize(20);
 glBegin(GL_POINTS);
 AlgoritmaNaif1(0,10,200,500 ); 
 AlgoritmaNaif2(0,10,500,500); 
 AlgoritmaDDA (0,0,500,500); 
 MidPoint (100,100,500,150);
 glEnd(); 
 glFlush(); } 

 void MidPoint (int x1,int y1,int x2,int y2)
{ GLint xi =x1;
   GLint yi =y1; 
   GLint dy = y2-y1; 
   GLint dx = x2-x1;
   GLint D = (2 * dy) -dx; 
   GLint dE = 2* dy; 
   GLint dNE = dy-dx; 

    while (xi <= x2)  
        { glVertex2f (xi,yi); 
             if (D<0) D+= dE;
            else {
                    D+= dNE;
            xi++;
        }
        yi++;
    }
}


void AlgoritmaNaif1(int x1,int y1,int x2,int y2) {
GLfloat xi=x1;
GLfloat yi=y1;
GLfloat m=(y2-y1)/(x2-x1);

for (xi=x1; xi<x2; xi++) {
yi=m*(xi-x1)+y1;
glVertex2f(xi,yi);
printf("(%f,%f)\n",xi,yi);
}
}

void AlgoritmaNaif2(int x1,int y1,int x2,int y2) {
GLfloat xi=0;
GLfloat yi=y1;
GLfloat m=(y2-y1)/(x2-x1);

for (xi=x1; xi<x2; xi++) {
yi=m*(xi-x1)+y1;
yi+=m;
glVertex2f(xi,yi);
printf("(%f,%f)\n",xi,yi);
}
}

void AlgoritmaDDA (int x1, int y1, int x2, int y2){
    GLfloat xi=x1;
    GLfloat yi=y1;
    GLfloat m = (y2-y1)/(x2-x1);

    for (xi=x1; xi<x2; xi++){
        yi+= m;
        glVertex2f (xi,yi);
        printf ("%f, %f\n", xi,yi);

    }
}

2 komentar:

  1. mid pointnya sudah terjawab jika x2 semakin besar nilai inputnya maka ia semakin panjang garisnya. Sedangkan y2 jika kita input nilainya yang lebih kecil maka semakin tinggi nilai derajatnya hahahahahaha........

    BalasHapus
  2. Bisa juga dengan cara menukarkan nilai x dengan nilai y, jadi si y mendapatkan perulangan secara terus-menerus mengakibatkan nilai y semakin besar......

    BalasHapus