1 // Mandelbrot pictures |
1 // Mandelbrot pictures |
|
2 //===================== |
2 // |
3 // |
3 // see https://en.wikipedia.org/wiki/Mandelbrot_set |
4 // see https://en.wikipedia.org/wiki/Mandelbrot_set |
4 // |
5 // |
5 // under scala 2.13 needs to be called with |
6 // under scala 2.13.1 needs to be called with |
6 // scala -cp `coursier fetch -p org.scala-lang.modules:scala-parallel-collections_2.13:0.2.0` mandelbrot.scala |
7 // |
|
8 // scala -cp scala-parallel-collections_2.13-0.2.0.jar mandelbrot.scala |
7 |
9 |
8 import java.awt.Color |
10 import java.awt.Color |
9 import java.awt.Dimension |
11 import java.awt.Dimension |
10 import java.awt.Graphics |
12 import java.awt.Graphics |
11 import java.awt.Graphics2D |
13 import java.awt.Graphics2D |
100 |
102 |
101 // deltas for each grid step |
103 // deltas for each grid step |
102 val d_x = (end.re - start.re) / W |
104 val d_x = (end.re - start.re) / W |
103 val d_y = (end.im - start.im) / H |
105 val d_y = (end.im - start.im) / H |
104 |
106 |
105 for (y <- (0 until H).par) { |
107 for (y <- (0 until H)) { |
106 for (x <- (0 until W).par) { |
108 for (x <- (0 until W)) { |
107 |
109 |
108 val c = start + |
110 val c = start + |
109 (x * d_x + y * d_y * i) |
111 (x * d_x + y * d_y * i) |
110 val iters = iterations(c, max) |
112 val iters = iterations(c, max) |
111 val col = |
113 val col = |
133 |
135 |
134 // example 1 |
136 // example 1 |
135 val exa1 = -2.0 + -1.5 * i |
137 val exa1 = -2.0 + -1.5 * i |
136 val exa2 = 1.0 + 1.5 * i |
138 val exa2 = 1.0 + 1.5 * i |
137 |
139 |
138 time_needed(mandelbrot(exa1, exa2, 1000)) |
140 println(s"${time_needed(mandelbrot(exa1, exa2, 1000))} secs") |
139 |
141 |
140 // example 2 |
142 // example 2 |
141 val exb1 = -0.37465401 + 0.659227668 * i |
143 val exb1 = -0.37465401 + 0.659227668 * i |
142 val exb2 = -0.37332410 + 0.66020767 * i |
144 val exb2 = -0.37332410 + 0.66020767 * i |
143 |
145 |
154 // some more computations with example 3 |
156 // some more computations with example 3 |
155 |
157 |
156 val delta = (exc2 - exc1) * 0.0333 |
158 val delta = (exc2 - exc1) * 0.0333 |
157 |
159 |
158 /* |
160 /* |
159 time_needed( |
161 println(s"${time_needed( |
160 for (n <- (0 to 12)) |
162 for (n <- (0 to 12)) |
161 mandelbrot(exc1 + delta * n, |
163 mandelbrot(exc1 + delta * n, |
162 exc2 - delta * n, 100)) |
164 exc2 - delta * n, 100))} secs") |
163 */ |
165 */ |
164 |
166 |
165 /* |
|
166 time_needed( |
|
167 for (n <- (0 to 12)) |
|
168 mandelbrot(exc1 + delta * n, |
|
169 exc2 - delta * n, 1000)) |
|
170 */ |
|
171 |
167 |
172 |
168 |
173 // Larry Paulson's example |
169 // Larry Paulson's example |
174 val exl1 = -0.74364990 + 0.13188170 * i |
170 val exl1 = -0.74364990 + 0.13188170 * i |
175 val exl2 = -0.74291189 + 0.13261971 * i |
171 val exl2 = -0.74291189 + 0.13261971 * i |
176 |
172 |
177 //time_needed(mandelbrot(exl1, exl2, 1000)) |
173 //println(s"${time_needed(mandelbrot(exl1, exl2, 1000))} secs") |
178 |
174 |
179 |
175 |
180 // example by Jorgen Villadsen |
176 // example by Jorgen Villadsen |
181 val exj1 = 0.10284 - 0.63275 * i |
177 val exj1 = 0.10284 - 0.63275 * i |
182 val exj2 = 0.11084 - 0.64075 * i |
178 val exj2 = 0.11084 - 0.64075 * i |