Algorithme de lignes

Contenu du snippet

voici un algorithme de lignes utilisant seulement la fonction putpixel() (permet d'allumer un pixel) d'Allegro. Donc il est facilement adaptable a une autre librairie graphique.

Je depose cette source en attendant vos critiques et ainsi je pourrais optimiser mon code...

Source / Exemple :


void MyLine(int xdep, int ydep, int xfin, int yfin)
{
   float a=0;
   int temp=0;
   int cste=0;
   
   unsigned int dy;
   unsigned int dx;
   
   dx=abs(xfin-xdep);
   dy=abs(yfin-ydep);
if(dx>=dy && dx!=0 && dy!=0)
{      
   if(xdep>xfin)
   {
      temp=xdep;
      xdep=xfin;
      xfin=temp;
   
      temp=ydep;
      ydep=yfin;
      yfin=temp;
   }
   a=((float)(yfin-ydep)/(xfin-xdep));
   
   for(int x=0;x<dx+1;x++)
   {
      putpixel(buffer,x+xdep,ydep+(x*a)+cste,makecol(255,255,255));
   }
}

if(dx<dy && dx!=0 && dy!=0)
{
   if(ydep>yfin)
   {
   temp=ydep;
   ydep=yfin;
   yfin=temp;
   
   temp=xdep;
   xdep=xfin;
   xfin=temp;
   }
   a=((float)(xfin-xdep)/(yfin-ydep));
   
   for(int y=0;y<dy+1;y++)
   {
      putpixel(buffer,xdep+(y*a)+cste,y+ydep,makecol(255,255,255));
   }
}

if(dx==0)
{
   if(ydep>yfin)
   {
      temp=ydep;
      ydep=yfin;
      yfin=temp;
   }
   for(int y=ydep;y<yfin+1;y++)
   putpixel(buffer,xdep,y,makecol(255,255,255));
}
if(dy==0)
{
      if(xdep>xfin)
   {
      temp=xdep;
      xdep=xfin;
      xfin=temp;
   }
   for(int x=xdep;x<xfin+1;x++)
   putpixel(buffer,x,ydep,makecol(255,255,255));
}
}

Conclusion :


Peut etre quand j'aurais le temps je commenterais mon code si ca peut vous aider...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.