Une frame montrant une fractale simple

Soyez le premier à donner votre avis sur cette source.

Vue 4 843 fois - Téléchargée 244 fois

Description

Bon, le code n'est pas tres commenté, mais la frame, le panel ... sont basique; la seule chose interresante c'est la gestion des segments qui sont à chaque fois traités de telle facon que chaque segment forme une croix.

Source / Exemple :


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**

  • <p>Title: Fractal</p>
  • <p>Description: Logiciel d'essai de fractal</p>
  • <p>Copyright: Copyright (c) 2003</p>
  • <p>Company: Cymored</p>
  • @author cymored
  • @version 1.0
  • /
public class Fractal extends JFrame { JPanelInApp j; JButton b; int n; public Fractal() { super("Fractal"); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); j= new JPanelInApp(); contentPane.add("Center", j); b = new JButton(" Fract 0 "); b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e1){ n++;b.setLabel("Fract "+n+" ");j.Fract();j.repaint();}}); contentPane.add("South",b); } public static void main(String[] args) { JFrame f = new Fractal(); f.setBounds(150,0,750,770); f.setVisible(true); f.setDefaultCloseOperation(DISPOSE_ON_CLOSE); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); } } class JPanelInApp extends JPanel{ int[] Xdeb = new int[100000]; int[] Ydeb = new int[100000]; int[] Xfin = new int[100000]; int[] Yfin = new int[100000]; int valid=0;//deja fractisé int max=1;//ceux pas encore traité int c=0; //l'indice du trait suivant libre JPanelInApp(){ setBackground(Color.white); Xdeb[0] = 0; Ydeb[0] = 375; Xfin[0] = 750; Yfin[0] =375; c++;//On a crée un trait donc on incremente } public void Fract(){ int b=0;//Le nombre de fractisé while(valid < max){ int a=valid;//celui en cours de fractisation if(Xdeb[a]==Xfin[a]){ //Ceux a gauche et a droite Ydeb[c]=Ydeb[a]; Xdeb[c]=Xdeb[a]; Yfin[c]=(Ydeb[a]+Yfin[a])/2; Xfin[c]=Xfin[a]; c++;b++; Ydeb[c]=(Ydeb[a]+Yfin[a])/2; Xdeb[c]=Xdeb[a]; Yfin[c]=Yfin[a]; Xfin[c]=Xfin[a]; c++;b++; //Ceux en haut et en bas Ydeb[c]=(Ydeb[a]+Yfin[a])/2; Xdeb[c]=Xdeb[a]; Yfin[c]=Ydeb[c]; Xfin[c]=Xdeb[c]+(Ydeb[a]-Yfin[a])/2; c++;b++; Ydeb[c]=(Ydeb[a]+Yfin[a])/2; Xdeb[c]=Xdeb[a]; Yfin[c]=Ydeb[c]; Xfin[c]=Xdeb[c]-(Ydeb[a]-Yfin[a])/2; c++;b++; } if(Ydeb[a]==Yfin[a]){ //Ceux a gauche et a droite Xdeb[c]=Xdeb[a]; Ydeb[c]=Ydeb[a]; Xfin[c]=(Xdeb[a]+Xfin[a])/2; Yfin[c]=Yfin[a]; c++;b++; Xdeb[c]=(Xdeb[a]+Xfin[a])/2; Ydeb[c]=Ydeb[a]; Xfin[c]=Xfin[a]; Yfin[c]=Yfin[a]; c++;b++; //Ceux en haut et en bas Xdeb[c]=(Xdeb[a]+Xfin[a])/2; Ydeb[c]=Ydeb[a]; Xfin[c]=Xdeb[c]; Yfin[c]=Ydeb[c]+(Xdeb[a]-Xfin[a])/2; c++;b++; Xdeb[c]=(Xdeb[a]+Xfin[a])/2; Ydeb[c]=Ydeb[a]; Xfin[c]=Xdeb[c]; Yfin[c]=Ydeb[c]-(Xdeb[a]-Xfin[a])/2; c++;b++; } valid++; if((a+1)==max){max=max+b;break;} } } public void paintComponent(Graphics g){ super.paintComponent(g); for(int m=valid; m<c; m++){ g.drawLine(Xdeb[m], Ydeb[m], Xfin[m], Yfin[m]);} } }

Conclusion :


Pas de bug connu, c'est juste pas tres beau :)
Cette exemple a juste le mérite d'expliquer simplement et graphiquemet ce qu'est une fractale.

Ou sinon merci a un mathematicien dans je ne me rapelle plus le nom pour avoir inventé cette fractale

Codes Sources

A voir également

Ajouter un commentaire Commentaire
Messages postés
24
Date d'inscription
mardi 16 décembre 2008
Statut
Membre
Dernière intervention
25 mars 2009

bonsoir
je trouve que votre programme est trés bien fait.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.