Strumenti Utente

Strumenti Sito


magistraleinformaticanetworking:spd:2018:mandel

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
magistraleinformaticanetworking:spd:2018:mandel [16/04/2018 alle 15:33 (7 anni fa)] – creata Massimo Coppolamagistraleinformaticanetworking:spd:2018:mandel [18/04/2018 alle 15:03 (7 anni fa)] (versione attuale) Massimo Coppola
Linea 1: Linea 1:
-''#include <iostream>+==== Example code for mandelbrot ==== 
 + 
 +C/C++ skeleton code for Mandelbrot computation.  
 + 
 +<code> 
 +#include <iostream>
 #include <string> #include <string>
 #include <algorithm> #include <algorithm>
 #include "tbb/parallel_for.h" #include "tbb/parallel_for.h"
 #include "tbb/blocked_range.h" #include "tbb/blocked_range.h"
 +// or use blocked_range2d if appropriate
  
 using namespace tbb; using namespace tbb;
 using namespace std; using namespace std;
  
-// costanti di default+// default constants
  
-//square area, lower left angle and size+// square area, lower left angle and size
 #define DEFAULT_X -2.0 #define DEFAULT_X -2.0
 #define DEFAULT_Y -2.0 #define DEFAULT_Y -2.0
Linea 17: Linea 23:
 #define DEFAULT_ITERATIONS 1000 #define DEFAULT_ITERATIONS 1000
  
-// we assume a point diverges if quared modulus exceeds this value+// we assume a point diverges if its squared modulus exceeds this value
 #define MAX_SMODULUS = 4 #define MAX_SMODULUS = 4
  
 +// a variable holding the number of iterations limit
 static int maxIter = DEFAULT_ITERATIONS; static int maxIter = DEFAULT_ITERATIONS;
  
  
-//funzione per calcolo mandelbrot in un punto+//function computing the mandelbrot in asingle point
 //returns the number of iteration until divergence //returns the number of iteration until divergence
 int mand_compute( double cx, double cy) int mand_compute( double cx, double cy)
 { {
-    int i;+ int i=0;
     double x = cx; double y = cy;     double x = cx; double y = cy;
     double nx, ny;     double nx, ny;
Linea 33: Linea 40:
     {     {
        // (x,y)^2 + c        // (x,y)^2 + c
-       nx = x*x - y*y; +       nx = x*x - y*y + cx
-       ny = 2*x*y+       ny = 2*x*y + cy;
        if ( nx*nx + ny*ny > MAX_SMODULUS ) break;        if ( nx*nx + ny*ny > MAX_SMODULUS ) break;
 +       x=nx; y=ny;
     }     }
     return i;     return i;
 } }
  
-// class to hold the computation+// define class to hold the computation
  
  
Linea 46: Linea 54:
 int main () { int main () {
  
-// inizializza iterazioni+// initialization
  
-// inizializza zona+// inizialize data if needed
  
-//crea parallel range+// parallel for 
 +// with blocked_range
  
-//parallel for 
  
 } }
-''+</code> 
 + 
 +==== Example code for saving an array as PPM graphics ==== 
 + 
 +Compile and link this file together with you code.  
 +Remember to insert the function prototye in the main source file 
 + 
 +<code> 
 +#include <stdlib.h> 
 +#include <stdio.h> 
 + 
 +/** C routine to save a 2d int array as an image to a simple graphic format **/  
 +/** edited form of code from the rosetta code project **/ 
 +/** https://rosettacode.org/wiki/Bitmap/Write_a_PPM_file **/ 
 + 
 + 
 +int saveimg(int dimx, int dimy, const char * filename, int * matrix, int max_value) 
 +
 +  // filename must end with  .ppm  
 +  // no parameter checking!!! you are on your own 
 +   
 +  // const int dimx = 800, dimy = 800; 
 +  int i, j; 
 +  FILE *fp = fopen(filename, "wb"); /* b - binary mode */ 
 +  (void) fprintf(fp, "P6\n%d %d\n255\n", dimx, dimy); 
 +  for (j = 0; j < dimy; ++j) 
 +  { 
 +    for (i = 0; i < dimx; ++i) 
 +    { 
 +      // here you may use any scaling function you prefer 
 +      int val = matrix[i +j*dimy]; 
 +      if (max_value!=255) 
 + { val = (val *255) / max_value; // scale to 0 - 255 
 +
 +      // 
 +      // rgb values are still rounded in case of mistakes 
 +      static unsigned char color[3]; 
 +      color[0] = val % 256;  /* red */ 
 +      color[1] = val % 256;  /* green */ 
 +      color[2] = val % 256;  /* blue */ 
 +      (void) fwrite(color, 1, 3, fp); 
 +    } 
 +  } 
 +  (void) fclose(fp); 
 +  return 0; 
 +
 + 
 +</code> 
magistraleinformaticanetworking/spd/2018/mandel.1523892793.txt.gz · Ultima modifica: 16/04/2018 alle 15:33 (7 anni fa) da Massimo Coppola

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki