# DidaWiki

### Strumenti Sito

magistraleinformaticanetworking:spd:2018:mandel

### Example code for mandelbrot

C/C++ skeleton code for Mandelbrot computation.

#include <iostream>
#include <string>
#include <algorithm>
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
// or use blocked_range2d if appropriate

using namespace tbb;
using namespace std;

// default constants

// square area, lower left angle and size
#define DEFAULT_X -2.0
#define DEFAULT_Y -2.0
#define DEFAULT_SIZE 4.0
#define DEFAULT_PIXELS 10
#define DEFAULT_ITERATIONS 1000

// we assume a point diverges if its squared modulus exceeds this value
#define MAX_SMODULUS = 4

// a variable holding the number of iterations limit
static int maxIter = DEFAULT_ITERATIONS;

//function computing the mandelbrot in asingle point
//returns the number of iteration until divergence
int mand_compute( double cx, double cy)
{
int i=0;
double x = cx; double y = cy;
double nx, ny;
for (i=0; i<maxIter; i++)
{
// (x,y)^2 + c
nx = x*x - y*y + cx;
ny = 2*x*y + cy;
if ( nx*nx + ny*ny > MAX_SMODULUS ) break;
x=nx; y=ny;
}
return i;
}

// define class to hold the computation

//main
int main () {

// initialization

// inizialize data if needed

// parallel for
// with blocked_range

}

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

#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;
}

magistraleinformaticanetworking/spd/2018/mandel.txt · Ultima modifica: 18/04/2018 alle 15:03 (4 anni fa) da Massimo Coppola