|      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 |