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

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
magistraleinformaticanetworking:spd:2018:mandel [16/04/2018 alle 15:38 (7 anni fa)] Massimo Coppolamagistraleinformaticanetworking:spd:2018:mandel [18/04/2018 alle 15:03 (7 anni fa)] (versione attuale) Massimo Coppola
Linea 1: Linea 1:
 +==== Example code for mandelbrot ====
 +
 +C/C++ skeleton code for Mandelbrot computation. 
 +
 <code> <code>
 #include <iostream> #include <iostream>
Linea 5: Linea 9:
 #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 18: 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 34: 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 47: 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> </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.1523893087.txt.gz · Ultima modifica: 16/04/2018 alle 15:38 (7 anni fa) da Massimo Coppola

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki