Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Aide pour faire un zoom [ Archives / Au secours ] (Jarod1980)

jeudi 4 août 2005 à 15:36:32 | Aide pour faire un zoom

Jarod1980

Bonjour tout le monde,

J'aurais besoin d'aide pour faire un zoom par exemple un zoom de selection rectangulaire qui agrandit la zone voulue sur un programme que j'ai fais qui génére une fractale de Mandelbrot. Je ne sais vraiment pas du tout comment m'y prendre. J'aimerais savoir si quelqu'un peut me donner un coup de main ou des conseils pour faire ce genre d'artifice.
Merci d'avance.

Mon code source:

import java.awt.*; 
import java.awt.event.*;


public class FractaleZoom {

    static int maxSize = 600;      // largeur fenetre en pixel
    static int size = 100;           
 
 
 // globals:
    static int squareWidth = maxSize / size;
    static Graphics g;  
    static int frameTop, frameLeft;  
 
public static void main(String[] args) {
  int winx=600;
  int winy=600;
  double xbegin = -1.8;
  double xend=1.1;
  double ybegin = -1.2;
  double yend=1.2;
  
  // initialise fenetre et graphics:
        Frame gWin = new Frame("Fractale Mandelbrot");
        gWin.setLocation(50,50);  // position fenetre           gWin.setResizable(false);
        gWin.setVisible(true);  // affiche!
        Insets theInsets = gWin.getInsets();
        gWin.setSize(maxSize+theInsets.left+theInsets.right,maxSize+theInsets.top+theInsets.bottom);
        frameTop = theInsets.top;
        frameLeft = theInsets.left;
        long resumeTime = System.currentTimeMillis() + 1000;
        do {} while (System.currentTimeMillis() < resumeTime);  // attente pour initialisation fenetre
        g = gWin.getGraphics();  // met les objets graphiques 
 
  for(float i=0;i<winx;i+=0.999){
    for(float j=0;j<winy;j+=0.999){

      // define z_0
      double zIm = j*(yend-ybegin)/(winy*1.0)+ybegin;
      double zRe = i*(xend-xbegin)/(winx*1.0)+xbegin;

      double cIm = zIm;
      double cRe = zRe;

      // res est le compteur d'iterations
      double temp;
      int res = 0;

      // on prend 255 iterations comme max
      while(res<255 && (zIm*zIm + zRe*zRe)<=4.0 ){
 // z^2= (a+bj)*(a+bj)= a^2 - b^2 + j*(2*a*b)
 // temp = zRe*zRe - zIm *zIm + i*(xend-xbegin)/(winx*1.0)+xbegin;
 // zIm =  2*zRe * zIm + j*(yend-ybegin)/(winy*1.0)+ybegin;
 temp = zRe*zRe - zIm *zIm + cRe;
 zIm =  2*zRe * zIm + cIm;
 zRe = temp;
 res++;
      }

   g.setColor(new Color(0,0,(float)((res*1.0)/255.0)));
   g.drawLine((int)(i), (int)(j),(int)(i),(int)(j));
    }
   }
}

}



Jarod_Delaware


jeudi 4 août 2005 à 21:53:35 | Re : Aide pour faire un zoom

GodConan

oulala ;o) c est pas du java ca... ;o)

ce serai plus facil en prog objet ;o)

et faire un zoom c est pas bien dur (transfomation du graphics) mais gerer la selection souris c est un peu plus chian a faire . ;o) il te faut gerer l affichage du rectangle en plus et utilser un listener, pour la souris, sur ton composent ....

GL


GodConan

vendredi 5 août 2005 à 10:49:54 | Re : Aide pour faire un zoom

Jarod1980

Salut GodConan,

Merci pour ta réponse. Qu'est ce qu'il serait le plus facile alors pour faire mon zoom dans mon programme ?

Jarod_Delaware

vendredi 5 août 2005 à 11:58:39 | Re : Aide pour faire un zoom
vendredi 5 août 2005 à 12:17:55 | Re : Aide pour faire un zoom

GodConan

tien voila deja comment tu devrai presenter ta class pour pouvoir la retravailler

public class FrmFractal extends JFrame
{
    public FrmFractal()
    {
        setTitle( "Fractale Mandelbrot" );
        setSize( 600, 600 );
        Container pnl = getContentPane();
        pnl.setLayout( new BorderLayout() );
        pnl.add( new PnlFractal(), BorderLayout.CENTER );
        pnl.addComponentListener( new ComponentAdapter(){
            @Override
            public void componentResized( ComponentEvent e )
            {
                FrmFractal.this.repaint();
            }
           
        });
    }

    // globals:

    public static void main( String[] args )
    {
        new FrmFractal().setVisible( true );
    }
   
    class PnlFractal extends JPanel
    {
//        int winx = 600;
//        int winy = 600;
        double xbegin = -1.8;
        double xend = 1.1;
        double ybegin = -1.2;
        double yend = 1.2;

        public PnlFractal()
        {
           
        }
       
        public void paint( Graphics g )
        {
            super.paint( g );
            Dimension d = getSize();
            double winx = d.getWidth();
            double winy = d.getHeight();
           
            for ( float i = 0; i < winx; i += 0.999 )
            {
                for ( float j = 0; j < winy; j += 0.999 )
                {

                    // define z_0
                    double zIm = j * (yend - ybegin) / (winy * 1.0) + ybegin;
                    double zRe = i * (xend - xbegin) / (winx * 1.0) + xbegin;

                    double cIm = zIm;
                    double cRe = zRe;

                    // res est le compteur d'iterations
                    double temp;
                    int res = 0;

                    // on prend 255 iterations comme max
                    while ( res < 300 && (zIm * zIm + zRe * zRe) <= 4.0 )
                    {
                        // z^2= (a+bj)*(a+bj)= a^2 - b^2 + j*(2*a*b)
                        // temp = zRe*zRe - zIm *zIm + i*(xend-xbegin)/(winx*1.0)+xbegin;
                        // zIm = 2*zRe * zIm + j*(yend-ybegin)/(winy*1.0)+ybegin;
                        temp = zRe * zRe - zIm * zIm + cRe;
                        zIm = 2 * zRe * zIm + cIm;
                        zRe = temp;
                        res++;
                    }
                    g.setColor( new Color( 0, 0, (float)((res * 1.0) / 300.0) ) );
                    g.drawLine( (int)(i), (int)(j), (int)(i), (int)(j) );
                }
            }
        }
    }
}

avec ca deja tu fait un zoom sur le resize ;o) 
en parametrant les valeur de decalage et de taille tu doi pouvoir faire ton zoom


GL

GodConan


vendredi 5 août 2005 à 12:20:26 | Re : Aide pour faire un zoom

GodConan

tu fera pas atention au component listener il est en trop ;o)

GodConan

vendredi 5 août 2005 à 12:28:50 | Re : Aide pour faire un zoom

Jarod1980

Merci GodConan pour ton aide. Je vais testé ce que tu m'as écris. Je te tiens au courant.
Merci encore.

Jarod_Delaware



Cette discussion est classé dans : int, double, gwin, zre, zim


Répondre à ce message

Sujets en rapport avec ce message

Probleme dans mon programme fractale [ par Jarod1980 ] Bonjour tout le monde,J'aurais besoin d'aide pour résoudre un petit problème. J'ai adapté un programme que j'ai fais en C (fractale de Julia) en Java. tableau maxi 40 elements ! [ par gabule ] Bonjour tout le monde.Voila j'ai un probleme.Mon script sert a recupere dans un fichier txt des coordonnées de points(2 colonnes : x et y) et en faire calcul de matrice [ par camy12 ] bonjour tout le monde!!je suis débutante en Java et avec eclipse aussi, j'afficher les elements d'une matrice et je veux calculer le maximum de chacun division d'une matrice sur un vecteur avec java [ par camy12 ] bonjour tout le monde.j'ai un problème avec mon programme, il me signale pas d'érreurs dans mon code mais il me génère un erreurs de compilation. je p faute inaperçue [ par TSI3ISSAT ] ce programme n'affiche que 1pour quoi? int fact(int n){  int i,P=1;  for(i=n;i>0;i--)  P=P*i;  return P;  }  double pow(double x, int n)   { int i;    Imprimer une jtable AVEC UN TITRE [ par asetti ] slt,grâce au source que l'on ma donner je suis arriver à imprimer une jtable.mon probleme est que ça fait depuis 8h ce matin que je cherche comment im double-->int comment? [ par Nargzul ] Comment on fait pour transformer des double en int, des string en double et des des string en int... merci partie entière double -> int [ par jmg02001 ] bonjour, sauriez vous comment récupérer la partie entière d'un double dans un int?voici mes tentatives échouées: double latitude = 1.0;int degre_latit JTable et utilisation de variables type double [ par Deun ] Salut, Bon, je viens de mettre à Java.... et même à la progrmmation tout court en fait. Alors voilà mon soucis (la solution doit être évidente, car a problem avec JTable svp aidez moi [ par yacir ] salut tout le monde  g un petit probleme avec ce programme:il consiste à faire la soustration entre 2 valeurs de 2 cellules de JTable et il affiche le


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.