Une frame montrant une fractale simple

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

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.