Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1450 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] drawLine, faire le sien?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] drawLine, faire le sien?

n°1722063
Twub
Posté le 22-04-2008 à 17:02:55  profilanswer
 

Bonjour,
 
Je viens vous demander un peu d'aide  :D  
 
Voila je suis donc en java, en j2me même, mais ici ce n'est pas important.  
Je voudrais réaliser un drawLine nouveau et ne pas utiliser celui de la librairie Graphics, pour cela j'utilise l'affichage par drawRGB(),
je m'explique je donne en paramètre le tableau contenant les pixels en ARGB, et ainsi l'image s'affiche avec mon dessin dedans.
 
Donc le principe, je crée mon propre tirer trait:

Code :
  1. .
  2. ...
  3. .....
  4. private int[] tableauImage = new int[getWidth()*getHeight()];
  5. .
  6. ...
  7. ....
  8. public void tirerTrait(int x1, int y1, int x2, int y2, int ARGB)
  9. {
  10.      double x = Math.abs(_x2 - _x1);
  11.      double y = Math.abs(_y2 - _y1);
  12.      double pt = Math.sqrt(x*x+y*y);
  13.      double ptx= x/pt;
  14.      double pty = y/pt;
  15.      double bufx = _x1;
  16.      double bufy = _y1;
  17.      for(int i=0; i<=pt; i++)
  18.      {
  19.          this.__tabJeux[((int)bufx+(int)bufy*(int)this.__width)] = _ARGB;
  20.          bufx = bufx + ptx;
  21.          bufy = bufy + pty;
  22.      }
  23. }
  24. ..
  25. ...


Mais par exemple pour :
fillLine(10,10,45, 100,ARGB);
Le trait n'est pas régulier.... des imperfections, comment régler se problème?
 
Merci a vous ;)  
 
Twub


Message édité par Twub le 22-04-2008 à 17:13:58
mood
Publicité
Posté le 22-04-2008 à 17:02:55  profilanswer
 

n°1722071
Twub
Posté le 22-04-2008 à 17:11:57  profilanswer
 

Pardon? je viens de modifier le post si y'a un soucis faites signe ^^

n°1722122
Twub
Posté le 22-04-2008 à 17:42:39  profilanswer
 

Vraiment super cette algo de Bresenham,
adapté il fonctionne très bien sa me simplifie bien la vie, un grand merci en tout cas ;)  
 
Par contre je n'arrive pas a trouver celui de Wu... tu n'aurais pas une petite info? ^^
 
merci xD

n°1722612
Twub
Posté le 23-04-2008 à 09:57:28  profilanswer
 

Merci,
 
Trés interessant, je vais essayer de l'adapté en java, sa doit pas être trop dure ;)
 
je fais signe si j'y arrive et si j'y arrive pas aussi ^^
 
ps: si quelqu'un a la version java je suis preneur xD
 
Merci encore


Message édité par Twub le 23-04-2008 à 10:02:27
n°1722882
Twub
Posté le 23-04-2008 à 15:08:19  profilanswer
 

Bon en fin de compte j'ai réussi a faire pour la partie ou dx > dy celle qui est expliqué en fait sur : http://en.wikipedia.org/wiki/Xiaol [...] _algorithm
 
Mais j'ai un problème avec le else, je comprend pas ce qu'il faut changer, pourtant c'est pas dur...
 
Je veux bien un coup de main si vous avez compris ;)
 
merci xD


Message édité par Twub le 23-04-2008 à 15:09:45
n°1724162
Twub
Posté le 25-04-2008 à 09:40:00  profilanswer
 

Toujours personne pour mon problème? ^^
 
En tout cas, merci beaucoup pour l'aide ;)

n°1724445
Twub
Posté le 25-04-2008 à 14:39:44  profilanswer
 

Ok ben pour l'instant j'ai fais sa:
 

Code :
  1. public double decimal(double _a)
  2. {
  3. //retourne la partie decimal
  4. }
  5.  
  6. public double rdecimal(double _a)
  7. {
  8. //retourne 1 moins la partie decimal
  9. }
  10.  
  11.     public void drawLine(int _x1, int _y1, int _x2, int _y2, int _couleur)
  12.     {
  13.         if(_x2 < _x1)
  14.         {
  15.             int buf = _x1;
  16.             _x1 = _x2;
  17.             _x2=buf;
  18.             buf = _y1;
  19.             _y1 = _y2;
  20.             _y2 = buf;
  21.         }
  22.  
  23.         double dx = _x2 - _x1;
  24.         double dy = _y2 - _y1;
  25.         double gradient = dy/dx;
  26.         
  27.         if(Math.abs(dx) > Math.abs(dy))
  28.         {                
  29.             //horizontal
  30.             //1er point
  31.             double xend = (double)round(_x1);
  32.             double yend = (double)_y1 + gradient * (xend - (double)_x1);
  33.             double xgap = (1-decimal(_x1 + 0.5));
  34.             double xpxl1 = xend ;
  35.             double ypxl1 = yend;
  36.  
  37.             this.__tabJeux[((int)xpxl1+(int)(ypxl1*this.__width))] = defineColor((int)(((rdecimal(yend))* xgap)*255),0,0,0);
  38.             this.__tabJeux[((int)xpxl1+((int)ypxl1+1)*this.__width)] = defineColor((int)(((decimal(yend)* xgap))*255),0,0,0);
  39.             
  40.             double intery = yend + gradient;
  41.             
  42.             // dernier point
  43.             xend = round(_x2);
  44.             yend = (int)(_y2 + gradient * (xend - _x2));
  45.             xgap = decimal(_x2 + 0.5);
  46.             double xpxl2 = xend ;
  47.             double ypxl2 = yend;
  48.             this.__tabJeux[((int)xpxl2+(int)ypxl2*this.__width)] = defineColor((int)((((rdecimal(yend))* xgap))*255),0,0,0);
  49.             this.__tabJeux[((int)xpxl2+(int)(ypxl2+1)*this.__width)] = defineColor((int)(((decimal(yend)* xgap))*255),0,0,0);
  50.  
  51.             // boucle principal
  52.             for(double x = xpxl1 + 1.0; x<xpxl2 - 1.0;x++)
  53.             {
  54.                 this.__tabJeux[((int)x+(int)intery*this.__width)] = defineColor((int)(((rdecimal(intery)))*255),0,0,0);
  55.                 this.__tabJeux[((int)x+((int)intery+1)*this.__width)] = defineColor((int)(((decimal(intery)))*255),0,0,0);
  56.                 intery = intery + gradient;
  57.             }
  58.         }
  59.         else //ICI COMMENT FAIRE ?
  60.         {
  61. }
  62. }


 
Voila, c'est la second partie, le else je vois pas vraiment quoi changer ^^
 
merci ;)


Message édité par Twub le 25-04-2008 à 14:42:20
n°1725983
Twub
Posté le 29-04-2008 à 10:01:56  profilanswer
 

Petit UP ^^
 
Si jamais vous avez des questions je suis la xD
 
merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] drawLine, faire le sien?

 

Sujets relatifs
[Résolu]java.util.zip ne pas avoir le chemin des fichiers[java] Un servlet pour générer une page html
stp j'ai besoin d'aide sur les évènements dans javaJAVA Ne pas afficher le E sur les nombres dit scientific
JAVA / ORACLE / TOMCATEPartager JFrame en Java
Controle d'un navigateur par une appli javaJava pour débutants
[JAVA] Lancer application Externe et Afficher dans une Frame 
Plus de sujets relatifs à : [Java] drawLine, faire le sien?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR