@.         
                @@         
          :     :@         
          .@     @         
           :@    @+        
            +@   @@        
        `@@@;'@` +@        
       '@@'+@@@@; @        
               @@@@'       
                +@@@.      
                 `@@@+     
       :@@:@.     :@@@     
        .@@@@:     @       
          @#@@@    @:      
          .@ '@@@  @@      
           ;@  #@@@`.      
            @+  @@@@@      
             @   +@@@@:    
        @@@@@@.    +@@@+   
        @@.@@@        .    
         @,                
         `@                
          +@               
        #@@;               
       :@:@@@              
       .@ #+#@             
       `@  @ @+            
        @'  @ @            
        :@  :@@            
         @@  #;            
          @:               
           @:              
                .          
                @+         
        ;:      `@         
       +@@@      ::        
        #@@@'     @        
         :@@@@    :;       
          `@@@@:   @       
           .@@@@#  @`      
             @;@@@`+@      
              @ @@@@@      
               @ '@@#      
                @  ;       
                 @         
         @@@:    :@        
        @@@@@@:   ##       
        +  :@@@@.  @`      
         @   :@@@@ ;@      
         +@    ;@@@@@      
          @#     #@@@      
           @       +.      
        @@@@@              
       @@@@@@+             
       @   ;@@             
       #,   ;@+            
        @`   @@            
        :@# @+@            
         .@@@:`            
                           
           :               
         . #;              
        @@@@@              
       @.`#@@@             
       @    @@.            
       :#    @@            
        @#   @@            
         @@@@##            
          @@@              
                           
                           
                           
       .@@@@@#`            
       @+:;;@@@@:          
       ;@ @ @@ @@@`        
        @@@@ @@` @@#       
         ;@@  :@; :@@`     
          @+    @@  @@+    
          #@     `@+ .@#   
           @:      .@#:@;  
            @         :@   
                     
 
 

Popular Posts

Recently I was encountered with the Bresenham's Line Drawing Algorithm. If you want to know more about it Google is your friend and here is a nice Proof that I found. It has four different condition and with little variation. So instead of writing four functions for 4 different Slopes, here I wrote one function that works for all. The trick is to pass the parameters according to the slopes and use the same function instead of using 4 different function.Here is the code in OpenGl.
#include <GL/glut.h>
#include <iostream>
using namespace std;
int a, b, c, d, flag;
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-160.0, 160.0, -160.0, 160.0);
}

void PutPixel(int x, int y) {
    glColor3f(1.0f, 0.0, 0.0);
    glBegin(GL_POINTS);
    if(flag)
    glVertex2i(y,x);
    else
    glVertex2i(x, y);
    glEnd();
}
//The Generalized Function, sweet ans Short.
//First three parameters only required, rest if made global need not be passed.
void bresenhamGen(int x, int y, int p, int dx, int dy, int limit, int xinc, int yinc) {
    if(limit < 0) {
        return;
    }
    PutPixel(x, y);
    if(p < 0)
        bresenhamGen(x + xinc, y, p + 2*dy, dx, dy, limit - 1, xinc, yinc);
    else {
        bresenhamGen(x + xinc, y + yinc, p + (2*dy - 2*dx), dx, dy, limit - 1, xinc, yinc);
    }
}
//checking the slope ans calling the function accordingly.
void bresenham(int x1 , int y1, int x2, int y2) {
    if(x1 > x2) {
        swap(x1, x2);swap(y1, y2);
    }
    int dx, dy;
    dx = x2 - x1;
    dy = y2 - y1;
    float m = (float)dy/dx;
    if(m > 0 && m < 1) {
        flag = 0;
        bresenhamGen(x1, y1, 2*dy - dx, dx, dy, x2 - x1, 1, 1);
    }
    else if(m >= 1) {
        flag = 1;
        bresenhamGen(y1, x1, 2*dx - dy, dy, dx, y2-y1, 1, 1);
    }
    else if(m < -1.0) {
        flag = 1;
        bresenhamGen(y1, x1, 2*dx + dy, -1*dy, dx, y1 - y2, -1, 1);
    }
    else if(m >= - 1) {
        flag = 0;
        bresenhamGen(x1, y1, -2*dy - dx, dx, -1*dy, x2 - x1, 1, -1);
    }
}
void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    bresenham(a, b, c, d);
    glFlush();
}

int main(int argc, char **argv) {
    cin>>a>>b>>c>>d;
    glutInit(&argc, argv);          
    glutCreateWindow("Bresenham");  
    glutInitWindowSize(320, 320);   
    glutInitWindowPosition(100, 100); 
    glutDisplayFunc(display);
    init(); 
    glutMainLoop();
    return 0;
}

0 comments