View Javadoc
1   package org.woehlke.computer.kurzweil.tabs.dla.view;
2   
3   import org.woehlke.computer.kurzweil.tabs.dla.DiffusionLimitedAggregation;
4   import org.woehlke.computer.kurzweil.tabs.dla.model.Particles;
5   import org.woehlke.computer.kurzweil.tabs.dla.model.Point;
6   
7   import javax.swing.*;
8   import java.awt.*;
9   
10  
11  /**
12   * Diffusion Limited Aggregation.
13   *
14   * (C) 2006 - 2013 Thomas Woehlke.
15   * https://thomas-woehlke.blogspot.com/2016/01/diffusion-limited-aggregation.html
16   * @author Thomas Woehlke
17   *
18   * Date: 05.02.2006
19   * Time: 00:51:51
20   */
21  public class WorldCanvas extends JComponent implements DiffusionLimitedAggregation {
22  
23      static final long serialVersionUID = 242L;
24  
25  
26      private Particles particles;
27      private Point worldDimensions;
28  
29      private final Color MEDIUM = Color.BLACK;
30      private final Color PARTICLES = Color.BLUE;
31  
32      public WorldCanvas(Point worldDimensions, Particles particles) {
33          this.worldDimensions = worldDimensions;
34          this.setBackground(MEDIUM);
35          this.setSize(this.worldDimensions.getX(), this.worldDimensions.getY());
36          this.particles=particles;
37      }
38  
39      public void paint(Graphics g) {
40          super.paintComponent(g);
41          int width = worldDimensions.getX();
42          int height = worldDimensions.getY();
43          g.setColor(MEDIUM);
44          g.fillRect(0,0,width,height);
45          g.setColor(PARTICLES);
46          for(Point pixel:particles.getParticles()){
47              g.drawLine(pixel.getX(),pixel.getY(),pixel.getX(),pixel.getY());
48          }
49          for(int y=0;y<worldDimensions.getY();y++){
50              for(int x=0;x<worldDimensions.getX();x++){
51                  int age = particles.getDendriteColor(x,y);
52                  if(age>0){
53                      age /= 25;
54                      int blue = (age / 256) % (256*256);
55                      int green = (age % 256);
56                      int red = 255;
57                      Color ageColor = new Color(red,green,blue);
58                      g.setColor(ageColor);
59                      g.drawLine(x,y,x,y);
60                  }
61              }
62          }
63      }
64  
65      public void update(Graphics g) {
66          paint(g);
67      }
68  
69      public Point getWorldDimensions() {
70          return worldDimensions;
71      }
72  }