Hemofobia

Untitled

Dec 7th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.98 KB | None | 0 0
  1. import java.applet.Applet;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4.  
  5. public final class Mandelbrot1 extends Applet implements MouseListener,ActionListener {
  6.  
  7.     Button paint;
  8.     Button repaint;
  9.     TextField textfield;
  10.     int iter=0;
  11.     private int max_iter=100;
  12.     private Color[] colors=new Color[75];
  13.     private double centerX=0.0;
  14.     private double centerY=0.0;
  15.     private double zoom=1.0;
  16.     private int mouseX;
  17.     private int mouseY;
  18.     public void init() {
  19.         setName("Mandelbrot");
  20.         setSize(800,600);
  21.         paint=new Button();
  22.         paint.setLabel("Paint");
  23.         repaint=new Button();
  24.         repaint.setLabel("Repaint");
  25.         textfield=new TextField();
  26.         textfield.setText("");
  27.         add(textfield);
  28.         add(paint);
  29.         add(repaint);
  30.         paint.addActionListener(this);
  31.         repaint.addActionListener(this);
  32.  
  33.         addMouseListener(this);
  34.         for(int i=0; i<colors.length; i++) {
  35.             int c=2*i*256/colors.length;
  36.             if(c>255)
  37.                 c=511-c;
  38.             colors[i] = new Color(c, c, 78);
  39.         }
  40.     }
  41.     public void paint(Graphics g){
  42.         Dimension size=getSize();
  43.         this.paint.setSize(60,20);
  44.         this.paint.setLocation(340, 0);
  45.         this.repaint.setSize(60,20);
  46.         this.repaint.setLocation(370,580);
  47.         this.textfield.setSize(60,20);
  48.         this.textfield.setLocation(400, 0);
  49.         for (int y=0; y<size.height; y++) {
  50.             for (int x=0; x<size.width; x++) {
  51.                 double r=zoom / Math.min(size.width, size.height);
  52.                 Complex z=new Complex(2.5*(x*r+centerX)-2.0, 1.25-2.5*(y*r+centerY));
  53.                 int value=mandelbrot(z);
  54.                 g.setColor(colors[value%colors.length]);
  55.                 g.drawLine(x, y, x, y);
  56.             }
  57.         }
  58.     }
  59.     public void update(Graphics g) {
  60.         paint(g);
  61.     }
  62.     private int mandelbrot(Complex z0) { //pętla do poprawienia
  63.         Complex z=new Complex(z0);
  64.         for(int t=0; t<iter; t++)
  65.         {
  66.             if(z.abs()>2.0) return t;
  67.             z.mul(z).add(z0);
  68.         }
  69.         return max_iter;
  70.     }
  71.     public void mousePressed(MouseEvent e) {
  72.         mouseX=e.getX();
  73.         mouseY=e.getY();
  74.     }
  75.     public void mouseReleased(MouseEvent e) {
  76.         int x=e.getX();
  77.         int y=e.getY();
  78.         if((e.getModifiers()&InputEvent.BUTTON1_MASK)!= 0) {
  79.             if(x!= mouseX&&y!=mouseY) {
  80.                 int w=getSize().width;
  81.                 int h=getSize().height;
  82.                 centerX+=zoom*Math.min(x, mouseX)/Math.min(w, h);
  83.                 centerY+=zoom*Math.min(y, mouseY)/Math.min(w, h);
  84.                 zoom*=Math.max((double)Math.abs(x-mouseX)/w,(double)Math.abs(y-mouseY)/h);
  85.             }
  86.         }
  87.         repaint();
  88.     }
  89.     public void mouseClicked(MouseEvent e) {}
  90.     public void mouseEntered(MouseEvent e) {}
  91.     public void mouseExited(MouseEvent e) {}
  92.     @Override
  93.     public void actionPerformed(ActionEvent e) {
  94.         if(e.getSource()==paint){
  95.             int temp=toInt(textfield,textfield.getText());
  96.             if(temp>max_iter){
  97.                 System.out.println("Liczba przekracza maksymalną liczbę iteracji.");
  98.             }
  99.             if(temp<0){
  100.                 System.out.println("Liczba mniejsza niż minimalna liczba iteracji.");
  101.             }
  102.             else{
  103.                 iter=temp;
  104.                 repaint();
  105.             }
  106.         }
  107.         else if(e.getSource()==repaint){
  108.             centerX=centerY=0.0;
  109.             zoom=1.0;
  110.             repaint();
  111.         }
  112.     }
  113.  
  114.     private int toInt(TextField input, String message)
  115.     {
  116.         try
  117.         {
  118.             int num=Integer.parseInt(input.getText());
  119.             System.out.println("Input: "+num+" is a number");
  120.             return num;
  121.         }catch(NumberFormatException e)
  122.         {
  123.             System.out.println("Error: "+message+ " is not a number");
  124.             return 0;
  125.         }
  126.     }
  127. }
Add Comment
Please, Sign In to add comment