//#include "stdafx.h" //#include "rw7.h" // //using namespace std; // ////User Input //int X, Y, N_RW; //int MAX_DISTANCE, PARTICLES, THRESHOLD; //double PIXEL_SIZE; //double increment; // // ////Global Variables //int particle; //int escapeFlag; //int deadPoreFlag; //int enteredFiberFlag; //int DATA_POINTS; //int seedValue; // ////debug //int counter = 0; // //unsigned char* ds_RW; //double *dist;//dist[1100]; //double *dispx2, *dispy2, *dispz2;//dispx2[1100], dispy2[1100], dispz2[1100]; // //double xo, yo, zo, x, y, z, xf, yf, zf; //double r; //double lambda; //double distance; // //FILE *foutDDx2, *foutDDy2, *foutDDz2, *foutSeedValue; // ///*--------------------------- RANDOM WALK ---------------------------*/ //int random_walk (char* raw_input, int x, int y, int n, int T, double pixel, // int mDist, int inc, int part, int invert) //{ // X = x; Y = y; N_RW = n; PIXEL_SIZE = pixel; MAX_DISTANCE = mDist; increment = inc; // PARTICLES = part; // int i; // //debug // //int j, k; // //FILE* debug; // //debug = fopen("DEBUG.txt","w"); // // char inputSlice[512], outputSlice[512]; // // foutDDx2 = fopen("DDx2","w"); // foutDDy2 = fopen("DDy2","w"); // foutDDz2 = fopen("DDz2","w"); // // foutSeedValue = fopen("SeedValue.txt","w"); // if(foutSeedValue == NULL){ // printf("Error Opening SeedValue.txt\n"); // exit(1); // } // seedValue = time(0)%10000; // fprintf(foutSeedValue, "Seed Value : %d\n", seedValue); // fclose (foutSeedValue); // // srand (seedValue); // // for ( i = 0; i < N_RW; i++) // { // //cout << endl << "Reading Slice: " << i; // sprintf( inputSlice, "%s%d", raw_input, (i+1)); // sprintf( outputSlice,"bin_%d", i); // // /* TO DO: CHECK LEI'S BINARIZE FUNCTION */ // //debug // //binarize_rw(inputSlice, outputSlice, T, invert);//binarize(inputSlice,outputSlice,T,invert); // } // // ds_RW = (unsigned char*)malloc(sizeof(unsigned char)*N_RW*Y*((int)ceil((double)X/8))); // if(!ds_RW) // { // write_to_log("Out of memory: ds_RW"); // return 1; // } // // // readSlices ( ); // calculateLambda ( ); // // for (particle=1; particle <= PARTICLES; particle++) // simulation ( ); // // // fclose(foutDDx2); // fclose(foutDDy2); // fclose(foutDDz2); // //free(ds_RW); // finalResults(); // free(ds_RW); // // return 0; //} // ///*--------------------- RANDOM WALK SIMULATION ---------------------*/ //int simulation ( ) //{ // double dataCollectionPoint; // // ::distance = 0; // escapeFlag = 0; // deadPoreFlag = 0; // enteredFiberFlag = 0; // DATA_POINTS = 0; // dataCollectionPoint = increment; // printf("\n\nPARTICLE : %d\n\n", particle); // // //allocate the memory needed for distance and displacement arrays // dist = (double*)malloc(sizeof(double)*((int)ceil(MAX_DISTANCE/increment))); // if(!dist) // { // write_to_log("RW: Out of memory: dist"); // return 1; // } // dispx2 = (double*)malloc(sizeof(double)*((int)ceil(MAX_DISTANCE/increment))); // if(!dispx2) // { // write_to_log("Out of memory: dispx2"); // return 1; // } // dispy2 = (double*)malloc(sizeof(double)*((int)ceil(MAX_DISTANCE/increment))); // if(!dispy2) // { // write_to_log("Out of memory: dispy2"); // return 1; // } // dispz2 = (double*)malloc(sizeof(double)*((int)ceil(MAX_DISTANCE/increment))); // if(!dispz2) // { // write_to_log("Out of memory: dispz2"); // return 1; // } // // searchStartingPoint ( ); // // while (10) // { // findNearestFiber ( ); // jump ( ); // // if (escapeFlag == 1) // break; // else if (enteredFiberFlag == 1) // break; // else // calculateDistance ( ); // // if (::distance >= dataCollectionPoint) // { // //debug // //printf("New data Collection Point Reached = %f\n", distance); fflush(stdout); // // dataCollectionPoint = dataCollectionPoint + increment; // // (*(dist + DATA_POINTS)) = ::distance; // // (*(dispx2 + DATA_POINTS)) = PIXEL_SIZE*PIXEL_SIZE*(x-xo)*(x-xo); // (*(dispy2 + DATA_POINTS)) = PIXEL_SIZE*PIXEL_SIZE*(y-yo)*(y-yo); // (*(dispz2 + DATA_POINTS)) = PIXEL_SIZE*PIXEL_SIZE*(z-zo)*(z-zo); // // DATA_POINTS++; // } // if (deadPoreFlag == 1) // break; // } // // simulationResults ( ); // // free(dist); // free(dispx2); free(dispy2); free(dispz2); // // return 0; //} // ///*---------------------- EXECUTES THE JUMP ----------------------*/ // //void jump ( ) //{ // double alpha, beta, gamma, mod, sign; // double dx, dy, dz; // // do // { // alpha = randomNoRW(1); sign = randomNoRW(1); if (sign < 0.5) alpha = (-1)*alpha; // beta = randomNoRW(1); sign = randomNoRW(1); if (sign < 0.5) beta = (-1)*beta ; // gamma = randomNoRW(1); sign = randomNoRW(1); if (sign < 0.5) gamma = (-1)*gamma; // mod = sqrt(alpha*alpha + beta*beta + gamma*gamma); // // } while (mod == 0 || mod > 1); // // dx = r*(alpha/mod); // dy = r*(beta/mod); // dz = r*(gamma/mod); // // x = x + dx; y = y + dy; z = z + dz; // // if (x < 0 || x > (X-1) || y < 0 || y > (Y-1) || z < 0 || z > (N_RW-1)) // { // escapeFlag = 1; // xf = x - dx; yf = y - dy; zf = z - dz; // return; // } // else if ( getSpot((int)z, (int)y, (int)x) == false)//(ds_RW[(int)z][(int)y][(int)x] == 0) // return; // else // searchIntersection (dx, dy, dz); //} // ///*-------------- LOCATES THE POINT OF INTERSECTION ---------------*/ //void searchIntersection (double dx, double dy, double dz) //{ // int xt, yt, zt; // double xi, yi, zi; // double x1, y1, z1, x2, y2, z2; // double xm, ym, zm; // double d; // double m; // // int used3DFlag, error3D; // // // x1 = x - dx; y1 = y - dy; z1 = z - dz; // x2 = x; y2 = y; z2 = z; // xi = x1; yi = y1; zi = z1; // // // used3DFlag = 0; // error3D = 0; // //StartOf3DMethod: // if ((int)x2 == (int)x1 - 1 && (int)y2 == (int)y1 && (int)z2 == (int)z1) // { // x = (int)x1; // m = (x - x1)/(x2 - x1); // y = y1 + m*(y2 - y1); // z = z1 + m*(z2 - z1); // used3DFlag = 1; // goto EndOf3DMethod; // } // // if ((int)x2 == (int)x1 + 1 && (int)y2 == (int)y1 && (int)z2 == (int)z1) // { // x = (int)x2 - FLT_EPSILON ; // m = (x - x1)/(x2 - x1); // y = y1 + m*(y2 - y1); // z = z1 + m*(z2 - z1); // used3DFlag = 1; // goto EndOf3DMethod; // } // // if ((int)x2 == (int)x1 && (int)y2 == (int)y1 - 1 && (int)z2 == (int)z1) // { // y = (int)y1; // m = (y - y1)/(y2 - y1); // x = x1 + m*(x2 - x1); // z = z1 + m*(z2 - z1); // // used3DFlag = 1; // // goto EndOf3DMethod; // } // // if ((int)x2 == (int)x1 && (int)y2 == (int)y1 + 1 && (int)z2 == (int)z1) // { // y = (int)y2 - FLT_EPSILON; // m = (y - y1)/(y2 - y1); // x = x1 + m*(x2 - x1); // z = z1 + m*(z2 - z1); // used3DFlag = 1; // // goto EndOf3DMethod; // } // // if ((int)x2 == (int)x1 && (int)y2 == (int)y1 && (int)z2 == (int)z1 - 1) // { // z = (int)z1; // m = (z - z1)/(z2 - z1); // x = x1 + m*(x2 - x1); // y = y1 + m*(y2 - y1); // // used3DFlag = 1; // // goto EndOf3DMethod;} // // if ((int)x2 == (int)x1 && (int)y2 == (int)y1 && (int)z2 == (int)z1 + 1) // { // z = (int)z2 - FLT_EPSILON; // m = (z - z1)/(z2 - z1); // x = x1 + m*(x2 - x1); // y = y1 + m*(y2 - y1); // // used3DFlag = 1; // } // // EndOf3DMethod: // // if (used3DFlag == 1) // { // // if (x < 0 || x > (X-1) || y < 0 || y > (Y-1) || z < 0 || z > (N_RW-1)) // error3D++; // else if ( getSpot((int)z, (int)y, (int)x) == true)//(ds_RW[(int)z][(int)y][(int)x] == 255) // error3D++; // else if (x2 >= x1 && (x > x2 || x < x1)) // error3D++; // else if (x1 >= x2 && (x > x1 || x < x2)) // error3D++; // else if (y2 >= y1 && (y > y2 || y < y1)) // error3D++; // else if (y1 >= y2 && (y > y1 || y < y2)) // error3D++; // else if (z2 >= z1 && (z > z2 || z < z1)) // error3D++; // else if (z1 >= z2 && (z > z1 || z < z2)) // error3D++; // else // goto EndOfBisectionMethod; // } // // //BisectionMethod: // // do // { // xm = (x1 + x2)/2; ym = (y1 + y2)/2; zm = (z1 + z2)/2; // xt = (int)xm; yt = (int)ym; zt = (int)zm; // // if (xt < 0 || xt > (X-1) || yt < 0 || yt > (Y-1) || zt < 0 || zt > (N_RW-1)) // { // escapeFlag = 1; // xf = x1; yf = y1; zf = z1; // break; // } // else if ( getSpot(zt, yt, xt) == false)//(ds_RW[zt][yt][xt] == 0) // { // x1 = xm; y1 = ym; z1 = zm; // } // else // { // x2 = xm; y2 = ym; z2 = zm; // } // // d = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1)); // // } while (d > 0.0001); // // x = x1; y = y1; z = z1; // // if ( getSpot((int)z, (int)y, (int)x) == true)//(ds_RW[(int)z][(int)y][(int)x] == 255) // { // enteredFiberFlag = 1; // // return; // } // // EndOfBisectionMethod: // r = sqrt((x-xi)*(x-xi) + (y-yi)*(y-yi) + (z-zi)*(z-zi)); //} // ///*--------------- CALCULATES THE VALUE OF LAMBDA ----------------------*/ // //void calculateLambda ( ) //{ // double sigma; // double kB; // sigma = 2.551*pow(10,-10); // kB = 1.3806*pow(10,-23); // lambda = kB*298/(1.013*pow(10,5)); // lambda = lambda/(1.414*3.14*sigma*sigma); // lambda = lambda*pow(10,6); // printf("\n\nLambda : %f\n\n", lambda); // // lambda = lambda/PIXEL_SIZE; //} // ///*---------------------- CREATES DISTANCE MAP -------------------------*/ // ////no longer created, distance is calculated on the fly // ///*------------------- CALCULATES THE STARTING POINT -----------------------*/ // //void searchStartingPoint ( ) //{ // while (10) // { // x = (int)(X/4) + (int)(randomNoRW(X/2)); // y = (int)(Y/4) + (int)(randomNoRW(Y/2)); // z = (int)(N_RW/2); // // if ( getSpot((int)z, (int)y, (int)x) == false) //(ds_RW[(int)z][(int)y][(int)x]==0) // break; // } // // x = x + 0.5; y = y + 0.5; z = z + 0.5; // xo = x; yo = y; zo = z; //} // ///*---------------- GENERATES THE RANDOM NUMBER -----------------*/ // //double randomNoRW(double k) //{ // return((double)rand()*k/((double)RAND_MAX)); //} // ///*---------------------- LOCATES THE NEAREST FIBER -------------------------*/ // //void findNearestFiber ( ) // //{ // int offset; // int nearestFlag; // double r1, r2, r3, r4, r5, r6;// temp2;// dist; // // // offset = 1; // nearestFlag = 0; // // r = 0; // r1 = r2 = r3 = r4 = r5 = r6 = 0; // // while (10) // { // if ((int)y-offset >= 0) // { // if ( getSpot((int)z, ((int)y-offset), (int)x) == true )//(ds_RW[(int)z][(int)y-offset][(int)x]==255) // { // r1 = y - (int)y + offset - 1; // nearestFlag = 1; // } // } // // if ((int)x-offset >= 0) // { // if ( getSpot((int)z, (int)y, ((int)x-offset) ) == true )//(ds_RW[(int)z][(int)y][(int)x-offset]==255) // { // r2 = x - (int)x + offset - 1; // nearestFlag = 1; // } // } // // if ((int)x+offset <= X-1) // { // if ( getSpot((int)z, (int)y, ((int)x+offset) ) == true )//(ds_RW[(int)z][(int)y][(int)x+offset]==255) // { // r3 = (int)x + 1 - x + offset - 1; // nearestFlag = 1; // } // } // // if ((int)y+offset <= Y-1) // { // if ( getSpot((int)z, ((int)y+offset), (int)x) == true )//(ds_RW[(int)z][(int)y+offset][(int)x]==255) // { // r4 = (int)y + 1 - y + offset - 1; // nearestFlag = 1; // } // } // // if ((int)z-offset >= 0) // { // if ( getSpot( ((int)z-offset), (int)y, (int)x) == true )//(ds_RW[(int)z-offset][(int)y][(int)x]==255) // { // r5 = z - (int)z + offset - 1; // nearestFlag = 1; // } // } // // if ((int)z+offset <= N_RW-1) // { // if ( getSpot( ((int)z+offset), (int)y, (int)x) == true )//(ds_RW[(int)z+offset][(int)y][(int)x]==255) // { // r6 = (int)z + 1 - z + offset - 1; // nearestFlag = 1; // } // } // // if (nearestFlag == 1) // break; // else // offset++; // // }// end of while(10) // // // if (r1>r) r = r1; // if (r2>r) r = r2; // if (r3>r) r = r3; // if (r4>r) r = r4; // if (r5>r) r = r5; // if (r6>r) r = r6; // // // if (r < 5*lambda) // r = lambda; //} ///*------------ CALCULATES THE ACTUAL DISTANCE COVERED ----------*/ // //void calculateDistance ( ) //{ // if (r>lambda) // ::distance = ::distance + (pow((PIXEL_SIZE*r),2))/(2*PIXEL_SIZE*lambda); // else // ::distance = ::distance + PIXEL_SIZE*r; // // if ((int)::distance > MAX_DISTANCE) // deadPoreFlag = 1; //} // ///*------------------ PRINTS SIMULATION RESULTS ----------------------*/ //void simulationResults ( ) //{ // int i; // // if (deadPoreFlag == 1) // { // particle = particle - 1; // printf("\nDEAD PORE FOUND\n"); // } // else if (enteredFiberFlag == 1) // { // particle = particle - 1; // printf("\nENTERED INTO FIBER\n"); // } // else // { // for (i=0; i < DATA_POINTS; i++) // { // fprintf( foutDDx2 ,"%f \t %f\n", (*(dist + i)), (*(dispx2 + i))); // fprintf( foutDDy2 ,"%f \t %f\n", (*(dist + i)), (*(dispy2 + i))); // fprintf( foutDDz2 ,"%f \t %f\n", (*(dist + i)), (*(dispz2 + i))); // } // } //} // // // //void finalResults() //{ // // // // //}