Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di AR64S-H
    Registrato dal
    Jun 2002
    Messaggi
    568

    [JAVA] Frattale che disegna male

    Sto scrivendo un programma seguendo le forume che da il mio libro ma il frattale disegnato è completamente diverso. Secondo voi perchè? Ecco il codice:
    Prima classe
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class FractalJPanel extends JPanel{
    	private Color color;
    	private int level;
    	
    	private final int WIDTH=400;
    	private final int HEIGHT=400;
    	
    	public FractalJPanel(int currentLevel)
    	{
    		color=Color.BLUE;
    		level=currentLevel;
    		setBackground(Color.WHITE);
    		setPreferredSize(new Dimension(WIDTH, HEIGHT));
    	}
    	
    	public void drawFractal(int level, int xA, int xB,int yA, int yB, Graphics g)
    	{
    		if(level==0)
    			g.drawLine(xA,yA,xB,yB);
    		else
    		{
    			int xC=(xA+xB)/2;
    			int yC=(yA+yB)/2;
    			
    			int xD=xA+(xC-xA)/2-(yC-yA)/2;
    			int yD=yA+(yC-yA)/2+(xC-xA)/2;
    			
    			drawFractal(level-1,xD,yD,xA,yA,g);
    			drawFractal(level-1,xD,yD,xC,yC,g);
    			drawFractal(level-1,xD,yD,xB,yB,g);
    		}
    	}
    	
    	public void paintComponent(Graphics g)
    	{
    		super.paintComponent(g);
    		g.setColor(color);
    		drawFractal(level,100,90,290,200,g);
    	}
    	
    	public void setColor(Color c)
    	{
    		color=c;
    	}
    	
    	public void setLevel(int currentLevel)
    	{
    		level=currentLevel;
    	}
    	
    	public int getLevel()
    	{
    		return level;
    	}
    }
    Seconda classe
    codice:
    import java.awt.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    
    public class Fractal extends JFrame
    {
    	private final int WIDTH=400;
    	private final int HEIGHT=480;
    	private final int MIN_LEVEL=0, MAX_LEVEL=15;
    	private Color color=Color.BLUE;
    	
    	private JButton changeColorJButton,increaseLevelJButton,decreaseLevelJButton;
    	private JLabel levelJLabel;
    	private FractalJPanel drawSpace;
    	private JPanel mainJPanel,controlJPanel;
    	
    	public Fractal(){
    		super("Fractal");
    		controlJPanel=new JPanel();
    		controlJPanel.setLayout(new FlowLayout());
    		
    		changeColorJButton=new JButton("Colore");
    		controlJPanel.add(changeColorJButton);
    		changeColorJButton.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				color=JColorChooser.showDialog(Fractal.this,"Scegli un colore",color);
    				if(color==null)
    					color=Color.BLUE;
    				drawSpace.setColor(color);
    			}				
    		});
    		
    		decreaseLevelJButton=new JButton("Decrementa Livello");
    		controlJPanel.add(decreaseLevelJButton);
    		decreaseLevelJButton.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				int level=drawSpace.getLevel();
    				level--;
    				if((level>=MIN_LEVEL)&&(level<=MAX_LEVEL))
    				{
    					levelJLabel.setText("Livello: "+level);
    					drawSpace.setLevel(level);
    					repaint();
    				}
    			}
    		});
    		
    		increaseLevelJButton=new JButton("Aumenta livello");
    		controlJPanel.add(increaseLevelJButton);
    		increaseLevelJButton.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				int level=drawSpace.getLevel();
    				level++;
    				if((level>=MIN_LEVEL)&&(level<=MAX_LEVEL))
    				{
    					levelJLabel.setText("Livello: "+level);
    					drawSpace.setLevel(level);
    					repaint();
    				}
    			}
    		});
    		
    		levelJLabel=new JLabel("Livello: 0");
    		controlJPanel.add(levelJLabel);
    		
    		drawSpace= new FractalJPanel(0);
    		
    		mainJPanel=new JPanel();
    		mainJPanel.add(controlJPanel);
    		mainJPanel.add(drawSpace);
    		
    		add(mainJPanel);
    		
    		setSize(WIDTH,HEIGHT);
    		setVisible(true);
    	}
    	
    	public static void main(String args[])
    	{
    		Fractal demo=new Fractal();
    		demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    }

  2. #2
    Utente di HTML.it L'avatar di AR64S-H
    Registrato dal
    Jun 2002
    Messaggi
    568
    trovato l'errore:

    sta nei parametri che riceve il metodo o si invertono i valori oppur eio consiglio di cambiare l'ordine dei parametri che riceve il metodo così

    drawFractal(int level, int xA, int yA,int xB, int yB, Graphics g){//codice}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.