progs/mandelbrot.scala
changeset 309 b192bc772613
parent 266 ca48ac1d3c3e
child 329 8a34b2ebc8cc
equal deleted inserted replaced
308:e86add5a6961 309:b192bc772613
     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