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  |