Aide pour faire un zoom

Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 4 août 2005 à 15:36
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 5 août 2005 à 12:28
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

6 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
4 août 2005 à 21:53
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
0
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
5 août 2005 à 10:49
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
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 août 2005 à 11:58
GodConan
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 août 2005 à 12:17
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 août 2005 à 12:20
tu fera pas atention au component listener il est en trop ;o)

GodConan
0
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
5 août 2005 à 12:28
Merci GodConan pour ton aide. Je vais testé ce que tu m'as écris. Je te tiens au courant.
Merci encore.

Jarod_Delaware
0
Rejoignez-nous