Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
TorusMixer.h
Go to the documentation of this file.
1 
10 #ifndef CLASS_TORUSMIXER
11 #define CLASS_TORUSMIXER
12 
13 #include <iostream>
14 #include <fstream>
15 #include <sstream>
16 #include <string>
17 #include "ForwardProcessing.h"
18 #include "DataType.h"
19 
20 using namespace std;
21 
23 
24  int proceed;
25 
26 
27 public:
28 
29  TorusMixer(){}
30 
31  ~TorusMixer(){}
32 
33  int make(vector<DataType *> *list, int width, int height, vector<int> parameters, int nParameters, bool show_data){
41  if(nParameters!=2)
42  return 1; //ERROR POR CANTIDAD DE PARÁMETROS, SE REQUIEREN SOLO 2 PARA FUNCIONAR
43  if(width!=height)
44  return 2; //ERROR IMAGEN NO CUADRADA
45  ofstream file;
46  //string format = ".txt";
47  //string path = "files/torus" + /*this->get() +*/ format;
48  int n = parameters[0];
49  int k = parameters[1];
50  unsigned int M[2][2], TorusMatrice[2][2];
51 
52  // Inicialización de la matriz con sus variables
53  TorusMatrice[0][0] = 1;
54  TorusMatrice[0][1] = 1;
55  TorusMatrice[1][0] = k;
56  TorusMatrice[1][1] = k+1;
57 
58  // Procedimiento matemático
59  for(int count=1; count < n; count++)
60  {
61  M[0][0]=(TorusMatrice[0][0]+TorusMatrice[0][1]*k)%width;
62  M[0][1]=(TorusMatrice[0][0]+TorusMatrice[0][1]*(k+1))%width;
63  M[1][0]=(TorusMatrice[1][0]+TorusMatrice[1][1]*k)%width;
64  M[1][1]=(TorusMatrice[1][0]+TorusMatrice[1][1]*(k+1))%width;
65 
66  TorusMatrice[0][0] = M[0][0];
67  TorusMatrice[0][1] = M[0][1];
68  TorusMatrice[1][0] = M[1][0];
69  TorusMatrice[1][1] = M[1][1];
70  }
71 
72  if(n)
73  {
74  file.open("files/torus.txt",ofstream::out| ofstream::trunc);
75  if(file.is_open()){
76  file << width*height << "\n";
77  for(int i = 0; i < width; i++)
78  for(int j = 0; j < width; j++)
79  {
80  int iPos = ((i*width)+j);
81  int ip = (TorusMatrice[0][0]*i + TorusMatrice[0][1]*j)%width;
82  int jp = (TorusMatrice[1][0]*i + TorusMatrice[1][1]*j)%width;
83  int fPos = ((ip*width)+jp);
84  DataType * aux = list->at(fPos);
85  list->at(fPos)=list->at(iPos);
86  list->at(iPos)=aux;
87  file << iPos << "-" << fPos << "\n";
88  }
89  if(show_data)
90  cout << "Torus Automorphisms Applied to Image\n";
91  proceed=true;
92  //this->set(1);
93  }
94  file.close();
95  return 0;
96  }
97  return 3;
98  }
99 
100  int unmake(vector<DataType *> *list, bool show_data){
104  if(proceed){
105  vector<string> array;
106  ifstream file;
107  string line, delimiter="-";
108  int iPos, fPos;
109  string path = "files/torus.txt";
110  file.open(path.c_str());
111  if(file.is_open()){
112  getline(file, line);
113  int width = atoi(line.c_str());
114  for(int x=0;x<width;x++){
115  getline(file, line);
116  array.push_back(line);
117  }
118  for(int x=0;x<width;x++){
119  string s = array.back();
120  array.pop_back();
121  size_t pos=0;
122  string token;
123  pos = s.find(delimiter);
124  token = s.substr(0, pos);
125  iPos = atoi(token.c_str());
126  s.erase(0, pos + delimiter.length());
127  pos = s.find(delimiter);
128  token = s.substr(0, pos);
129  fPos = atoi(token.c_str());
130  s.erase(0, pos + delimiter.length());
131  DataType * aux = list->at(fPos);
132  list->at(fPos)=list->at(iPos);
133  list->at(iPos)=aux;
134  }
135  if(show_data)
136  cout << "Torus Automorphisms undo to Image\n";
137  file.close();
138  proceed=false;
139  }
140  }
141  return 0;
142  }
143 
144 };
145 
146 
147 #endif
Clase abstracta que representa la estructura que debe tener todo procesamiento de imagen...
Clase que representa un tipo de dato que será paquetizado.
Definition: DataType.h:18
Clase que implementa el Método de Entrelazamiento usando Torus Automosphisms.
Definition: TorusMixer.h:22
int unmake(vector< DataType * > *list, bool show_data)
Definition: TorusMixer.h:100
int make(vector< DataType * > *list, int width, int height, vector< int > parameters, int nParameters, bool show_data)
Definition: TorusMixer.h:33