begin process at 2012 05 27 13:28:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > ALGORITHME DE LIGNES

ALGORITHME DE LIGNES


 Information sur la source

 Description

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

  • 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));
  • }
  • }
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...


 Sources du même auteur

FONCTIONS DE ROTATION DANS L'ESPACE

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

Commentaires et avis

Commentaire de Kirua le 05/09/2004 01:17:15

c'est l'algo de bresenham?

Commentaire de dletozeun le 10/09/2004 20:34:37

j'ai fais cet algo moi meme
je ne connais pas l'algo de bresenham

Commentaire de Kirua le 10/09/2004 20:52:51

de tte manière, ça n'aurait pas pu être celui-là, car l'algo de bresenham n'utilise pas de division et que des entiers. c'est un algo super rapide quoi ^^ essaye de chercher de ce côté, y a maitère intéressante :)

Commentaire de wikamk le 25/12/2004 15:47:57

pour qu' on comprenne vos trucs et que si vous voulz
mettez au moins quelques lignes de commentaire et salut Kirua
ahhhhhhhhhh
a++

Commentaire de wikamk le 25/12/2004 15:48:08

pour qu' on comprenne vos trucs et que si vous voulz
mettez au moins quelques lignes de commentaire et salut Kirua
ahhhhhhhhhh
a++

Commentaire de Damien147258 le 14/10/2005 08:30:43

Je relance un peu le sujet:
1- Algo pas du tout optimiser, je travail actuellement sur un moteur 3D utilisant la Xlib (linux) de bas niveau, j'utilise un do while pour le principale, quelques if pour la vérification comme:
si (y1 > y2) alors
y1--;
fin
Et oui, si on mets y1 plus grand que y2 il ne trouvera jamais le bout de la boucle...

Sinon, je suppose que cela pourrai servir pour une personne qui veut fqaire un moteur 3d avec allegro (et oui)
Cette lib est peut-etre 2d mais en faisant ces fonction, comme toi, on peut facilement faire un moteur 3d en mode fil de fer.

Commentaire de dletozeun le 14/10/2005 21:58:11

oui c'est vrai j'ai fais cette fonction pour un moteur 3D en fil de fer que j'avais fais avec allegro...mais j'ai vite arrété quand j'ai entendu parler d'acceleration matérielle...
Et je me suis rendu compte que faire un moteur 3D en software n'est pas genial...mais au moins j'ai appris quelques trucs a propos de la 3D.

Commentaire de Akoril le 31/07/2006 14:48:17

Salut,

j'ai fait recemment le même type de code mais avec GDK...
Quelqu'un a t'il la même chose avec l'enti-crenelage ? donc avec des get & set/put...

Merci,

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales