From f92dcfbbce3d2057e39314312deed941c22881f5 Mon Sep 17 00:00:00 2001
From: Camil Staps
Date: Tue, 2 Jun 2015 09:41:17 +0200
Subject: Start week15
---
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 +
17 files changed, 2010 insertions(+)
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
(limited to 'Week15 Mandelbrot')
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