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

  FORUM HardWare.fr
  Programmation

  [Java] kelk'un pourrai m'expliker ce code svp?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] kelk'un pourrai m'expliker ce code svp?

n°104561
leboss
Posté le 25-02-2002 à 15:52:16  profilanswer
 

Vouala c dans le cadre de mon tpe,j dois faire un prog pour generer un arbre en fractale ; alors la j'ai trouvé un code source en java mais bon je n'y connais absolument rien en java ( un peu en c ) et j'aimerais k'on m'explik un peu le code svp :D
paske en fait c po exactement ce ke je ve et ej voudrais ameliorer kelkes ptites choses .
Thanx :jap:
( si kelk'un a le temps de faireune explikation ligne par ligne ca s'rait tres sympa ; le prog est po tres long)
 
import java.awt.*;
import java.applet.Applet;
 
class Fractale extends Panel {
 Arbre arbre;
 boolean Affiche = false;
 double Rap, Pos, Ang;
 Color Coul[];
 int X1, Y1, X2, Y2, Iter, Tr, Tv, Tb, Fr, Fv, Fb;
 Image OffScr;
 Dimension Dim;
 Graphics OffGra;
 
 Fractale(Arbre arbre) {
  this.arbre = arbre;
 }
 
 void Fractal(Graphics g, int Ax, int Ay, int Bx, int By, double Angle, int I) {
  g.setColor(Coul[I]);
  OffGra.setColor(Coul[I]);
  g.drawLine(Ax, Ay, Bx, By);
  OffGra.drawLine(Ax, Ay, Bx, By);
  if(I != Iter){
   double Ag = Angle - Math.random() * Ang;
   double Ad = Angle + Math.random() * Ang;
   double Dist = Math.sqrt((Bx - Ax) * (Bx - Ax) + (By - Ay) * (By - Ay));
   int Cx = (int) (Pos * Bx + (1 - Pos) * Ax);
   int Cy = (int) (Pos * By + (1 - Pos) * Ay);
   int Dx = (int) (Cx + Rap * Dist * Math.sin(Ag));
   int Dy = (int) (Cy - Rap * Dist * Math.cos(Ag));
   int Ex = (int) (Cx + Rap * Dist * Math.sin(Ad));
   int Ey = (int) (Cy - Rap * Dist * Math.cos(Ad));
   Fractal(g, Cx, Cy, Dx, Dy, Ag, I+1);
   Fractal(g, Cx, Cy, Ex, Ey, Ad, I+1);
  }
 }
 
 public void paint(Graphics g){
  Dimension d = size();
  if ((Affiche) || (OffScr == null) || (d.width != Dim.width) || (d.height != Dim.height)){
   Dim = d;
   OffScr = createImage(d.width, d.height);
   OffGra = OffScr.getGraphics();
   Coul = new Color[Iter+1];
   for (int i = 0; i <= Iter; i++)
    Coul[i] = new Color((int)(Tr+i*(Fr-Tr)/Iter),
    (int)(Tv+i*(Fv-Tv)/Iter), (int)(Tb+i*(Fb-Tb)/Iter));
   g.setColor(getBackground());
   g.fillRect(0,0,d.width,d.height);
   OffGra.setColor(getBackground());
   OffGra.fillRect(0,0,d.width,d.height);
   X1 = X2 = d.width >> 1;
   Y1 = size().height-1;
   Y2 = (int)(0.6*size().height);
   Fractal(g, X1, Y1, X2, Y2, 0, 0);
   Affiche = false;
  } else
   g.drawImage(OffScr, 0, 0, null);
 }
 
}
 
public class Arbre extends Applet {
 TextField tIter, tRap, tPos, tAng;
 Fractale Tree;
 
 public void init(){
  setLayout(new BorderLayout());
  Tree = new Fractale(this);
  add("Center", Tree);
  Panel p = new Panel();
  add("South", p);
  String s;
  Tree.Iter=((s=getParameter("Iter" ))==null)?
   12:Integer.parseInt(s);
  Tree.Pos=((s=getParameter("Pos" ))==null)?
   .5:Double.valueOf(s).doubleValue();
  Tree.Rap=((s=getParameter("Rap" ))==null)?
   .8:Double.valueOf(s).doubleValue();
  Tree.Ang=((s=getParameter("Ang" ))==null)?
   .6:Double.valueOf(s).doubleValue();
  p.add(tIter=new TextField(Integer.toString(Tree.Iter),4));
  p.add(tPos=new TextField(Double.toString(Tree.Pos),4));
  p.add(tRap=new TextField(Double.toString(Tree.Rap),4));
  p.add(tAng=new TextField(Double.toString(Tree.Ang),4));
  p.add(new Button("Affiche" ));
 
  Tree.Tr=((s=getParameter("Tr" ))==null)?
   128:Integer.parseInt(s);
  Tree.Tv=((s=getParameter("Tv" ))==null)?
   64:Integer.parseInt(s);
  Tree.Tb=((s=getParameter("Tb" ))==null)?
   0:Integer.parseInt(s);
  Tree.Fr=((s=getParameter("Fr" ))==null)?
   64:Integer.parseInt(s);
  Tree.Fv=((s=getParameter("Fv" ))==null)?
   192:Integer.parseInt(s);
  Tree.Fb=((s=getParameter("Fb" ))==null)?
   0:Integer.parseInt(s);
  Tree.repaint();
 }
 
 public boolean action(Event ev, Object arg){
  if(ev.target instanceof Button){
   String label=(String) arg;
   Tree.Iter=Integer.parseInt(tIter.getText().trim
());
   Tree.Pos=Double.valueOf(tPos.getText().trim()).
doubleValue();
   Tree.Rap=Double.valueOf(tRap.getText().trim()).
doubleValue();
   Tree.Ang=Double.valueOf(tAng.getText().trim()).
doubleValue();
   if(Tree.Affiche=label.equals("Affiche" )) Tree.repaint();
   return true;
  }
  return false;
 }
}

mood
Publicité
Posté le 25-02-2002 à 15:52:16  profilanswer
 

n°104567
leboss
Posté le 25-02-2002 à 16:00:28  profilanswer
 

bon bon j viens de voir ke c un peu long a expliker kan meme...
snif..
connaitriez po de bons sites ki explikerait un peu les focntiosn k'on trouve ici?
ou sinon une exlpikation d'ensemble alors.
merci encore

n°104569
cycojesus
Mèo Lười
Posté le 25-02-2002 à 16:03:35  profilanswer
 

Et tu le code en quoi ?
 
Sinon, pas trop long, t'es gentil !!
 
en plus y'a toute la partie graphique qui vient "polluer" l'algo proprement dit...
 

leboss a écrit a écrit :

Vouala c dans le cadre de mon tpe,j dois faire un prog pour generer un arbre en fractale ; alors la j'ai trouvé un code source en java mais bon je n'y connais absolument rien en java ( un peu en c ) et j'aimerais k'on m'explik un peu le code svp :D
paske en fait c po exactement ce ke je ve et ej voudrais ameliorer kelkes ptites choses .
Thanx :jap:
( si kelk'un a le temps de faireune explikation ligne par ligne ca s'rait tres sympa ; le prog est po tres long)
 
import java.awt.*;
import java.applet.Applet;
 
class Fractale extends Panel {
 Arbre arbre;
 boolean Affiche = false;
 double Rap, Pos, Ang;
 Color Coul[];
 int X1, Y1, X2, Y2, Iter, Tr, Tv, Tb, Fr, Fv, Fb;
 Image OffScr;
 Dimension Dim;
 Graphics OffGra;
 
 Fractale(Arbre arbre) {
  this.arbre = arbre;
 }
 
 void Fractal(Graphics g, int Ax, int Ay, int Bx, int By, double Angle, int I) {
  g.setColor(Coul[I]);
  OffGra.setColor(Coul[I]);
  g.drawLine(Ax, Ay, Bx, By);
  OffGra.drawLine(Ax, Ay, Bx, By);
  if(I != Iter){
   double Ag = Angle - Math.random() * Ang;
   double Ad = Angle + Math.random() * Ang;
   double Dist = Math.sqrt((Bx - Ax) * (Bx - Ax) + (By - Ay) * (By - Ay));
   int Cx = (int) (Pos * Bx + (1 - Pos) * Ax);
   int Cy = (int) (Pos * By + (1 - Pos) * Ay);
   int Dx = (int) (Cx + Rap * Dist * Math.sin(Ag));
   int Dy = (int) (Cy - Rap * Dist * Math.cos(Ag));
   int Ex = (int) (Cx + Rap * Dist * Math.sin(Ad));
   int Ey = (int) (Cy - Rap * Dist * Math.cos(Ad));
   Fractal(g, Cx, Cy, Dx, Dy, Ag, I+1);
   Fractal(g, Cx, Cy, Ex, Ey, Ad, I+1);
  }
 }
 
 public void paint(Graphics g){
  Dimension d = size();
  if ((Affiche) || (OffScr == null) || (d.width != Dim.width) || (d.height != Dim.height)){
   Dim = d;
   OffScr = createImage(d.width, d.height);
   OffGra = OffScr.getGraphics();
   Coul = new Color[Iter+1];
   for (int i = 0; i <= Iter; i++)
    Coul[i] = new Color((int)(Tr+i*(Fr-Tr)/Iter),
    (int)(Tv+i*(Fv-Tv)/Iter), (int)(Tb+i*(Fb-Tb)/Iter));
   g.setColor(getBackground());
   g.fillRect(0,0,d.width,d.height);
   OffGra.setColor(getBackground());
   OffGra.fillRect(0,0,d.width,d.height);
   X1 = X2 = d.width >> 1;
   Y1 = size().height-1;
   Y2 = (int)(0.6*size().height);
   Fractal(g, X1, Y1, X2, Y2, 0, 0);
   Affiche = false;
  } else
   g.drawImage(OffScr, 0, 0, null);
 }
 
}
 
public class Arbre extends Applet {
 TextField tIter, tRap, tPos, tAng;
 Fractale Tree;
 
 public void init(){
  setLayout(new BorderLayout());
  Tree = new Fractale(this);
  add("Center", Tree);
  Panel p = new Panel();
  add("South", p);
  String s;
  Tree.Iter=((s=getParameter("Iter" ))==null)?
   12:Integer.parseInt(s);
  Tree.Pos=((s=getParameter("Pos" ))==null)?
   .5:Double.valueOf(s).doubleValue();
  Tree.Rap=((s=getParameter("Rap" ))==null)?
   .8:Double.valueOf(s).doubleValue();
  Tree.Ang=((s=getParameter("Ang" ))==null)?
   .6:Double.valueOf(s).doubleValue();
  p.add(tIter=new TextField(Integer.toString(Tree.Iter),4));
  p.add(tPos=new TextField(Double.toString(Tree.Pos),4));
  p.add(tRap=new TextField(Double.toString(Tree.Rap),4));
  p.add(tAng=new TextField(Double.toString(Tree.Ang),4));
  p.add(new Button("Affiche" ));
 
  Tree.Tr=((s=getParameter("Tr" ))==null)?
   128:Integer.parseInt(s);
  Tree.Tv=((s=getParameter("Tv" ))==null)?
   64:Integer.parseInt(s);
  Tree.Tb=((s=getParameter("Tb" ))==null)?
   0:Integer.parseInt(s);
  Tree.Fr=((s=getParameter("Fr" ))==null)?
   64:Integer.parseInt(s);
  Tree.Fv=((s=getParameter("Fv" ))==null)?
   192:Integer.parseInt(s);
  Tree.Fb=((s=getParameter("Fb" ))==null)?
   0:Integer.parseInt(s);
  Tree.repaint();
 }
 
 public boolean action(Event ev, Object arg){
  if(ev.target instanceof Button){
   String label=(String) arg;
   Tree.Iter=Integer.parseInt(tIter.getText().trim
 
());
   Tree.Pos=Double.valueOf(tPos.getText().trim()).
 
doubleValue();
   Tree.Rap=Double.valueOf(tRap.getText().trim()).
 
doubleValue();
   Tree.Ang=Double.valueOf(tAng.getText().trim()).
 
doubleValue();
   if(Tree.Affiche=label.equals("Affiche" )) Tree.repaint();
   return true;
  }
  return false;
 }
}
 




---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
n°104570
JeromeV
On en a gros!
Posté le 25-02-2002 à 16:05:55  profilanswer
 

C'est assez simple et ca utilise un algo assez connu dont je ne parvient pas a retouver le nom.
En gros, à partir de chaque branche, on dessine 2 nouvelle branches en leur appliquant une rotation et un scale aléatoires.
C'est la méthode Fractale qui est recurssive qui se charge de ca.

n°104573
JeromeV
On en a gros!
Posté le 25-02-2002 à 16:10:13  profilanswer
 

IFS (Iterated Function System) c'est le nom de cet algo.
Un peu de doc à ce sujet : http://gjoly.free.fr/fractales-projet/IFS/ifs.html.

n°104768
leboss
Posté le 25-02-2002 à 22:59:16  profilanswer
 

url marche po :(
bon bon etant donne ke je n'y connais absolument irne en java , kel site me conseillerez vous pour m permettre de decrypter vite fait ce prog plize
merci

n°104876
JeromeV
On en a gros!
Posté le 26-02-2002 à 10:45:47  profilanswer
 

leboss a écrit a écrit :

url marche po :(
bon bon etant donne ke je n'y connais absolument irne en java , kel site me conseillerez vous pour m permettre de decrypter vite fait ce prog plize
merci  




Si tu commencais par ton cours de java ?
Ce prog n'a rien de particulier niveau syntaxe java.
C'est l'algoritme utilisé qui est interessant et c'est complètement indépendant du java.
Pour plus d'infos sur l'algo, fait une recherche sur arbre (ou tree) + ifs dans n'importe quel moteur.

 

[jfdsdjhfuetppo]--Message édité par JeromeV--[/jfdsdjhfuetppo]


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

  [Java] kelk'un pourrai m'expliker ce code svp?

 

Sujets relatifs
[JAVA] dessiner avec la souris dans une frame[JAVA] Comment visualiser des fichiers d'extension EV ?
[Java] ImageButton en Swing[Java] passage d'un tableau dans DLL et retour ? c'est encore moi!
[JAVA] Ca existe, ca ?[JAVA] Image en fond d'écran
[Java ou C#] Objet de base thread safe??[JAVA] Gestionnaire de mise en forme
[JAVA]J2SDK1.4.0 HElloWOrld[JAVA] prob d'exception
Plus de sujets relatifs à : [Java] kelk'un pourrai m'expliker ce code svp?


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