From f92dcfbbce3d2057e39314312deed941c22881f5 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 2 Jun 2015 09:41:17 +0200 Subject: Start week15 --- .gitignore | 4 +- Readme.md | 1 + Week15 Mandelbrot/build.xml | 73 + Week15 Mandelbrot/manifest.mf | 3 + Week15 Mandelbrot/nbproject/build-impl.xml | 1413 ++++++++++++++++++++ Week15 Mandelbrot/nbproject/genfiles.properties | 8 + Week15 Mandelbrot/nbproject/project.properties | 71 + Week15 Mandelbrot/nbproject/project.xml | 15 + Week15 Mandelbrot/src/mandelbrot/Area.java | 27 + .../src/mandelbrot/AreaController.java | 22 + Week15 Mandelbrot/src/mandelbrot/AreaSelector.java | 41 + Week15 Mandelbrot/src/mandelbrot/ColorChooser.java | 36 + Week15 Mandelbrot/src/mandelbrot/Grid.java | 16 + Week15 Mandelbrot/src/mandelbrot/GridFiller.java | 59 + Week15 Mandelbrot/src/mandelbrot/GridView.java | 63 + Week15 Mandelbrot/src/mandelbrot/MainWindow.java | 33 + Week15 Mandelbrot/src/mandelbrot/Mandelbrot.java | 34 + Week15 Mandelbrot/src/mandelbrot/RGBColors.java | 82 ++ Week15 Mandelbrot/src/mandelbrot/Stopper.java | 14 + 19 files changed, 2014 insertions(+), 1 deletion(-) create mode 100644 Week15 Mandelbrot/build.xml create mode 100644 Week15 Mandelbrot/manifest.mf create mode 100644 Week15 Mandelbrot/nbproject/build-impl.xml create mode 100644 Week15 Mandelbrot/nbproject/genfiles.properties create mode 100644 Week15 Mandelbrot/nbproject/project.properties create mode 100644 Week15 Mandelbrot/nbproject/project.xml create mode 100644 Week15 Mandelbrot/src/mandelbrot/Area.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/AreaController.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/AreaSelector.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/ColorChooser.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/Grid.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/GridFiller.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/GridView.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/MainWindow.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/Mandelbrot.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/RGBColors.java create mode 100644 Week15 Mandelbrot/src/mandelbrot/Stopper.java diff --git a/.gitignore b/.gitignore index 94654cb..760fba7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ /Week13 Die/build/ /Week13 Die/dist/ /Week14 Route 66/nbproject/private/ -/Week14 Route 66/build/ \ No newline at end of file +/Week14 Route 66/build/ +/Week15 Mandelbrot/nbproject/private/ +/Week15 Mandelbrot/build/ \ No newline at end of file diff --git a/Readme.md b/Readme.md index 1c94c56..c5e9c82 100644 --- a/Readme.md +++ b/Readme.md @@ -19,3 +19,4 @@ We use Netbeans IDE 8.0.2 and Visual Paradigm 12.0. * Week 13: die - threads; thread-safety, race conditions, etc. * Week 13: bar - sequential program to concurrent program * Week 14: automated car drivers - threads; `java.util.concurrent`; `wait()`, `notify()` and `notifyAll()` +* Week 15: mandelbrot with SwingWorkers diff --git a/Week15 Mandelbrot/build.xml b/Week15 Mandelbrot/build.xml new file mode 100644 index 0000000..c5a2ca3 --- /dev/null +++ b/Week15 Mandelbrot/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Week15 Mandelbrot. + + + diff --git a/Week15 Mandelbrot/manifest.mf b/Week15 Mandelbrot/manifest.mf new file mode 100644 index 0000000..1574df4 --- /dev/null +++ b/Week15 Mandelbrot/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Week15 Mandelbrot/nbproject/build-impl.xml b/Week15 Mandelbrot/nbproject/build-impl.xml new file mode 100644 index 0000000..fa82428 --- /dev/null +++ b/Week15 Mandelbrot/nbproject/build-impl.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Week15 Mandelbrot/nbproject/genfiles.properties b/Week15 Mandelbrot/nbproject/genfiles.properties new file mode 100644 index 0000000..50b0aed --- /dev/null +++ b/Week15 Mandelbrot/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=b07ebbd6 +build.xml.script.CRC32=7abc5264 +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=b07ebbd6 +nbproject/build-impl.xml.script.CRC32=73fd3cc1 +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/Week15 Mandelbrot/nbproject/project.properties b/Week15 Mandelbrot/nbproject/project.properties new file mode 100644 index 0000000..a69efe3 --- /dev/null +++ b/Week15 Mandelbrot/nbproject/project.properties @@ -0,0 +1,71 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Week15_Mandelbrot.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=mandelbrot.Mandelbrot +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Week15 Mandelbrot/nbproject/project.xml b/Week15 Mandelbrot/nbproject/project.xml new file mode 100644 index 0000000..013727d --- /dev/null +++ b/Week15 Mandelbrot/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + Week15 Mandelbrot + + + + + + + + + diff --git a/Week15 Mandelbrot/src/mandelbrot/Area.java b/Week15 Mandelbrot/src/mandelbrot/Area.java new file mode 100644 index 0000000..75331e3 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/Area.java @@ -0,0 +1,27 @@ +package mandelbrot; + +/** + * + * @author Sjaak + */ +public class Area { + private final double startX, startY, width, height; + + public Area (double x_tl, double y_tl, double width, double height) { + startX = x_tl; startY = y_tl; this.width = width; this.height = height; + } + + public double getX () { return startX; } + public double getY () { return startY; } + public double getWidth () { return width; } + public double getHeight () { return height; } + + public Area zoom (int xul, int yul, int zw, int zh, int tw, int th) { + double zoom_fact = ((double) zw) / tw; + return new Area (startX + (width * xul) / tw, + startY - (height * yul) / th, + width * zoom_fact, + height * zoom_fact); + } + +} diff --git a/Week15 Mandelbrot/src/mandelbrot/AreaController.java b/Week15 Mandelbrot/src/mandelbrot/AreaController.java new file mode 100644 index 0000000..304eb0f --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/AreaController.java @@ -0,0 +1,22 @@ +package mandelbrot; + +/** + * + * @author Sjaak Smetsers + */ +public class AreaController { + GridFiller filler; + Grid grid; + + public AreaController ( GridFiller filler, Grid grid ) { + this.filler = filler; + this.grid = grid; + } + + public void setArea(AreaSelector selector, int x, int y, int w, int h ) { + Area area = filler.getArea().zoom(x, y, w, h, grid.getWidth(), grid.getHeight()); + filler = new GridFiller (grid, area); + filler.fill(); + } + +} diff --git a/Week15 Mandelbrot/src/mandelbrot/AreaSelector.java b/Week15 Mandelbrot/src/mandelbrot/AreaSelector.java new file mode 100644 index 0000000..3af6fc2 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/AreaSelector.java @@ -0,0 +1,41 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +import java.awt.Component; +import java.awt.event.MouseEvent; +import javax.swing.event.MouseInputAdapter; + +/** + * + * @author Sjaak + */ +public class AreaSelector extends MouseInputAdapter { + + private Component component; + private AreaController controller; + private Stopper toBeStopped ; + + public AreaSelector(Component component, AreaController controller) { + this.component = component; + this.controller = controller; + component.addMouseListener(this); + } + + @Override + public void mouseClicked(MouseEvent e) { + if ( toBeStopped != null ){ + toBeStopped.tryToStop(); + } + int w = component.getWidth() / 2; + int h = component.getHeight() / 2; + controller.setArea(this, e.getX() - w / 2, e.getY() - h / 2, w, h); + } + + public void setStopper( Stopper stopper ) { + this.toBeStopped = stopper; + } + +} diff --git a/Week15 Mandelbrot/src/mandelbrot/ColorChooser.java b/Week15 Mandelbrot/src/mandelbrot/ColorChooser.java new file mode 100644 index 0000000..c3aa441 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/ColorChooser.java @@ -0,0 +1,36 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +/** + * + * @author Sjaak + */ +public class ColorChooser { + private int maxIndex; + + public ColorChooser () { + maxIndex = 0; + } + + public void setMaxIndex (int max_index) { + maxIndex = max_index; + } + + public int getColorIndex (double x0, double y0) { + double x = x0, y = y0; + int color_index = 0; + while (x * x + y * y < 4.0) { + double nx = x * x - y * y + x0; + y = 2 * x * y + y0; + x = nx; + color_index++; + if (color_index == maxIndex) { + return -1; + } + } + return color_index; + } +} diff --git a/Week15 Mandelbrot/src/mandelbrot/Grid.java b/Week15 Mandelbrot/src/mandelbrot/Grid.java new file mode 100644 index 0000000..74b4bd6 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/Grid.java @@ -0,0 +1,16 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +/** + * + * @author Sjaak + */ +public interface Grid { + void setPixel (int x, int y, int [] rgb); + + int getWidth (); + int getHeight (); +} diff --git a/Week15 Mandelbrot/src/mandelbrot/GridFiller.java b/Week15 Mandelbrot/src/mandelbrot/GridFiller.java new file mode 100644 index 0000000..1e741a2 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/GridFiller.java @@ -0,0 +1,59 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +import java.awt.Color; +import java.awt.Graphics; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.SwingWorker; + +/** + * + * @author Sjaak + */ +public class GridFiller { + + private Area area; + private Grid grid; + public static final int MAX_ITERATIONS = 400; + private static final RGBColors rgbColors = new RGBColors(MAX_ITERATIONS); + private static final ColorChooser colorChooser = new ColorChooser(); + + public GridFiller(Grid grid, Area area) { + this.grid = grid; + this.area = area; + colorChooser.setMaxIndex(MAX_ITERATIONS); + } + + public Area getArea() { + return area; + } + + public void fill() { + int grid_w = grid.getWidth(), grid_h = grid.getHeight(); + double area_w = area.getWidth(), area_h = area.getHeight(); + double dx = area_w / grid_w, dy = area_h / grid_h; + + double x = area.getX(); + for (int i = 0; i < grid_w; i++) { + double y = area.getY(); + for (int j = 0; j < grid_h; j++) { + int color = colorChooser.getColorIndex(x, y); + grid.setPixel(i, j, + color == -1 ? RGBColors.BLACK : rgbColors.getColor(color)); + + y -= dy; + } + try { + Thread.sleep( 2 ); + } catch (InterruptedException e) { + System.out.println("Sleeping thread interrupted"); + } + x += dx; + } + } +} diff --git a/Week15 Mandelbrot/src/mandelbrot/GridView.java b/Week15 Mandelbrot/src/mandelbrot/GridView.java new file mode 100644 index 0000000..9c43b68 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/GridView.java @@ -0,0 +1,63 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JComponent; +import javax.swing.JPanel; + +/** + * + * @author Sjaak + */ +public class GridView extends JPanel implements Grid +{ + private BufferedImage gridImage; + private WritableRaster gridRaster; + + + public static final int GRID_WIDTH = 600, GRID_HEIGHT = 600; + public static final int PIXELS_PER_REPAINT = (GRID_WIDTH * GRID_WIDTH) / 20; + + public GridView() { + gridImage = new BufferedImage(GRID_WIDTH, GRID_WIDTH, BufferedImage.TYPE_INT_RGB); + gridRaster = gridImage.getRaster(); + setPreferredSize(new Dimension(GRID_WIDTH, GRID_WIDTH)); + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + g.drawImage(gridImage, 0, 0, null); + } + + private int nrOfPixelsSet = 0; + + @Override + public void setPixel(int x, int y, int[] rgb) { + gridRaster.setPixel (x, y, rgb); + nrOfPixelsSet++; + if (nrOfPixelsSet == PIXELS_PER_REPAINT) { + repaint(); + nrOfPixelsSet = 0; + } + } + + @Override + public int getWidth() { + return GRID_WIDTH; + } + + @Override + public int getHeight() { + return GRID_HEIGHT; + } + +} diff --git a/Week15 Mandelbrot/src/mandelbrot/MainWindow.java b/Week15 Mandelbrot/src/mandelbrot/MainWindow.java new file mode 100644 index 0000000..eba8c3e --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/MainWindow.java @@ -0,0 +1,33 @@ +package mandelbrot; + + + +import java.awt.Insets; + +import javax.swing.JFrame; + +/** + * + * @author Sjaak Smetsers + * @version 1.0, 14-03-2013 + */ + +/** + * creates a window to which a GridView panel is added + * + */ +public class MainWindow { + + public MainWindow ( GridView grid ) { + JFrame mainFrame = new JFrame ("Mandelbrot"); + + mainFrame.setLocationRelativeTo(null); + mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + mainFrame.setResizable(false); + mainFrame.setVisible(true); + + mainFrame.add(grid); + mainFrame.pack(); + } + +} diff --git a/Week15 Mandelbrot/src/mandelbrot/Mandelbrot.java b/Week15 Mandelbrot/src/mandelbrot/Mandelbrot.java new file mode 100644 index 0000000..1980eed --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/Mandelbrot.java @@ -0,0 +1,34 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +import java.awt.BorderLayout; +import java.awt.Insets; +import javax.swing.JPanel; + + +/* +This class creates an applet for generating Mandelbrot sets. The applet is +meant to be embedded in an HTML page and has hooks to interact with the page. +Functions are provided to allow the user to zoom in and out and to move around +on the surface of the figure. The user can also select from a set of color +schemes. +*/ + +public class Mandelbrot +{ + public static void main(String args[]) { + + GridView grid = new GridView(); + MainWindow mandel = new MainWindow ( grid ); + + Area area = new Area ( -2.5, 2.5, 5, 5 ); + GridFiller filler = new GridFiller ( grid, area ); + AreaController controller = new AreaController ( filler, grid ); + AreaSelector selector = new AreaSelector ( grid, controller ); + filler.fill(); + } + +} \ No newline at end of file diff --git a/Week15 Mandelbrot/src/mandelbrot/RGBColors.java b/Week15 Mandelbrot/src/mandelbrot/RGBColors.java new file mode 100644 index 0000000..2abd7d5 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/RGBColors.java @@ -0,0 +1,82 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +/** + * + * @author Sjaak + */ +public class RGBColors { + + private int [][] rgbColors; + + public static final int [] BLACK = new int [3]; + + public RGBColors (int max_color_index) { + rgbColors = new int [max_color_index][3]; + randomPalets (); + randomColorSet (); + + } + + private static final int MAXRGB = 256; + + private static int [][][] palets = { + {{0,0},{1,-1},{0,1}}, + {{1,-1},{1,0},{0,0}}, + {{0,1},{0,1},{1,-1}}, + {{1,-1},{0,0},{1,0}}, + {{0,1},{0,1},{1,0}}, + {{1,0},{1,-1},{1,-1}}, + {{1,0},{0,1},{0,1}}, + {{1,-1},{1,0},{1,-1}} + }; + + private boolean randomBool () { + return Math.random() < 0.5; + } + + void randomPalets () { + for (int p = 0; p < palets.length; p++) { + for (int c = 0; c < 3; c++) { + int cw = randomBool () ? 1 : 0; + int cd = randomBool () ? (cw * -1) : (1 - cw); + palets [p][c][0] = cw; + palets [p][c][1] = cd; + } + } + } + + private void randomColorSet () { + int p_size = rgbColors.length / palets.length; + for (int p = 0; p < palets.length; p++) { + int [][] palet = palets [p]; + int r = palet [0][0] == 1 ? MAXRGB-1 : 0; + int g = palet [1][0] == 1 ? MAXRGB-1 : 0; + int b = palet [2][0] == 1 ? MAXRGB-1 : 0; + + int dr = palet [0][1] * MAXRGB / p_size; + int dg = palet [1][1] * MAXRGB / p_size; + int db = palet [2][1] * MAXRGB / p_size; + + for (int i = 0 ; i < p_size ; i++) { + rgbColors[i + p * p_size][0] = r; + rgbColors[i + p * p_size][1] = g; + rgbColors[i + p * p_size][2] = b; + r += dr; + g += dg; + b += db; + } + } + } + + public int [] getColor (int color_index) { + return rgbColors [color_index]; + } + + public int [] getColor2 (int color_index) { + return rgbColors [color_index]; + } +} diff --git a/Week15 Mandelbrot/src/mandelbrot/Stopper.java b/Week15 Mandelbrot/src/mandelbrot/Stopper.java new file mode 100644 index 0000000..f47a471 --- /dev/null +++ b/Week15 Mandelbrot/src/mandelbrot/Stopper.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mandelbrot; + +/** + * + * @author Sjaak + */ +public interface Stopper { + void tryToStop(); +} -- cgit v1.2.3