Developpez.com - Java
X

Choisissez d'abord la catégorieensuite la rubrique :

logo
Sommaire > Java > Fractales de Sierpinski
        Dessinner le tapis de Sierpinski
        Dessinner le triangle de Sierpinski



Auteur : Baptiste Wicht
Version : 11/07/2007
Dessinner le tapis de Sierpinski

Cette interface affiche un tapis de Sierpinski
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Cette classe permet d'afficher le Tapis de Sierpinski. 
 * 
 * @author Baptiste Wicht
 *
 */
public class Tapis extends JPanel {
	private static final long serialVersionUID = 6899161860200488093L;
	
	/**
	 * Construit un nouveau Tapis
	 *
	 */
	public Tapis(){
		super();
		
		setOpaque(false);
		setBackground(Color.white);
		setPreferredSize(new Dimension(500,500));
	}
	
	public static void main(String[] args) {
		JFrame frame = new JFrame("Tapis de sierpinski");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setContentPane(new Tapis());
		frame.pack();
		frame.setVisible(true);
	}
	
	public void paint(Graphics g) {
		int nbreX = 1;
		int nbreY = 1;
        
		int nbre = 3;
		int tailles = 6;
        
		int cote= (int)Math.pow(nbre, tailles);
		
		g.setColor(Color.white);
		g.fillRect(0, 0, getSize().width, getSize().height);
		
		g.setColor(Color.black);
		
		for (int i = 0; i < tailles; i++){
			for (int x = 0; x < nbreX; x++){
				for (int y =0; y < nbreY; y++){
					int xPosition = (1 + (nbre  * x)) * (cote / nbre);
					int yPosition = (1 + (nbre * y)) * (cote / nbre);
					
					g.fillRect(xPosition, yPosition, cote / nbre, cote / nbre);
				}
			}
			
			cote /= nbre;
			nbreX *= nbre;
			nbreY *= nbre;
		}
		
		super.paint(g);
	}
}

Auteur : Baptiste Wicht
Version : 11/07/2007
Dessinner le triangle de Sierpinski

Cette classe affiche le triangle de sierpinski
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Cette classe permet d'afficher le Triangle de Sierpinski. 
 * 
 * @author Baptiste Wicht
 *
 */
public class Triangle extends JPanel {
	private static final long serialVersionUID = 6899161860200488093L;

	private final int min = 8;
	private final int insets = 25;
	private int color = 0;
	private final Color[] colors = new Color[]{Color.red, Color.black, Color.blue};
	
	/**
	 * Construit un nouveau Triangle
	 *
	 */
	public Triangle(){
		super();
		
		setOpaque(false);
		setBackground(Color.white);
		setPreferredSize(new Dimension(800,700));
	}
	
	/**
	 * Retourne la taille de base du triangle
	 * 
	 * @return La taille de base du triangle
	 */
	private int getBaseSize(){
		return getSize().width - (insets * 2);
	}
	
	public void paint(Graphics g) {
        int hauteur  = (int)(getBaseSize() * Math.sqrt(3)/2);
        
        int xA = insets; 
        int xB = insets + getBaseSize(); 
        int xC = insets + getBaseSize() / 2; 

        int[] sommetsX = {xA, xB, xC};
        
        int yA = insets + hauteur;
        int yB = insets + hauteur;
        int yC = insets;
        
        int[] sommetsY = {yA, yB, yC};
        
        drawTriangle(sommetsX, sommetsY, getBaseSize() / 2 , g);
        
        super.paint(g);
    }

	/**
	 * Dessinne un triangle de Sierpinski. Si on n'a pas encore atteint la valeur minimale de largeur, on divise
	 * le triangle et on dessinne d'autres triangles plus petits par récursion. 
	 * 
	 * @param sommetsX Les sommets X à dessinner
	 * @param sommetsY Les sommets Y à dessinner
	 * @param d La taille de la base du triangle
	 * @param g L'object Graphics dans lequel il faut dessinner
	 */
    private void drawTriangle(int[] sommetsX, int[] sommetsY, int d , Graphics g) {
        if (d > min) {
        	int[] s1 = {2, 2, 1};
        	int[] s2 = {1, 0, 0};
        	
        	int[] x = {	(sommetsX[1] + sommetsX[2]) / 2, 
        				(sommetsX[0] + sommetsX[2]) / 2, 
        				(sommetsX[0] + sommetsX[1]) / 2};
        	
        	int[] y = {	(sommetsY[1] + sommetsY[2]) / 2, 
        				(sommetsY[0] + sommetsY[2]) / 2,
        				(sommetsY[0] + sommetsY[1]) / 2};
        	
            for(int i = 0; i < 3; i++){
            	int[] newX = {sommetsX[i], x[s1[i]], x[s2[i]]};
                int[] newY = {sommetsY[i], y[s1[i]], y[s2[i]]};
                
                drawTriangle(newX, newY, d / 2 , g);
            }
        } else {
        	g.setColor(colors[color]);
        	g.fillPolygon(sommetsX, sommetsY, 3); 
        	
        	if(color == 0){
        		color = 1;
        	} else if (color == 1){
        		color = 2;
        	} else {
        		color = 0;
        	}
        }
    }
    
    public static void main(String[] args) {
		JFrame frame = new JFrame("Triangle de sierpinski");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setContentPane(new Triangle());
		frame.pack();
		frame.setVisible(true);
	}
}


Consultez les autres pages sources


Valid XHTML 1.0 TransitionalValid CSS!