Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Biblioteca PUI/c++/Funciones.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Biblioteca PUI/c++/Funciones.cpp')
-rw-r--r--Biblioteca PUI/c++/Funciones.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/Biblioteca PUI/c++/Funciones.cpp b/Biblioteca PUI/c++/Funciones.cpp
new file mode 100644
index 0000000..3a36cd5
--- /dev/null
+++ b/Biblioteca PUI/c++/Funciones.cpp
@@ -0,0 +1,133 @@
+/* @author Sebastián Marichal
+ * sebastian_marichal@hotmail.com
+ * sebarocker@gmail.com
+ *
+ * Universidad de la República, Montevideo , Uruguay
+ */
+#include "Funciones.h"
+
+/*
+ * Funciones.cpp
+ *
+ * Created on: 26/11/2010
+ * Author: seba
+ */
+
+void calcularPuntoOrigen(double vertices[4][2],int* resultado ){
+ int minimo = 0;
+ int maximo = 0;
+ int i;
+ for(i=1;i<4;i++){
+ if(vertices[i][0] + vertices[i][1] < vertices[minimo][0] + vertices[minimo][1] ){
+ minimo = i;
+ }
+ if(vertices[i][0] + vertices[i][1] > vertices[maximo][0] + vertices[maximo][1] ){
+ maximo = i;
+ }
+ }
+ resultado[0] = minimo;
+ resultado[1] = maximo;
+}
+
+
+
+/*
+ * Devuelve una aproximacino del marcador definido por vertices.
+ * No realiza ningun chequeo para no salirse de la pantalla, por lo tanto el area debe ser usada con cuidado para no exceder los limites
+ * de la pantalla
+ * */
+int aproximarArea(double vertices[4][2]){
+ int resultado[2];
+ calcularPuntoOrigen(vertices, resultado);
+
+ float v0_x = vertices[resultado[0]][0];
+ float v0_y = vertices[resultado[0]][1];
+ float v2_x = vertices[resultado[1]][0];
+ float v2_y = vertices[resultado[1]][1];
+
+ int width = abs( v2_x - v0_x);
+ int height = abs(v2_y - v0_y);
+
+ return height*width;
+}
+
+/*
+ * Devuelve una aproximacion del marcador definido por vertices.
+ * Chequea los limites de la pantalla
+ * */
+int aproximarAreaVisible(double vertices[4][2],int xsize, int ysize, int offset_roi){
+
+ int resultado[2];
+ calcularPuntoOrigen(vertices, resultado);
+
+ float v0_x = vertices[resultado[0]][0];
+ float v0_y = vertices[resultado[0]][1];
+ float v2_x = vertices[resultado[1]][0];
+ float v2_y = vertices[resultado[1]][1];
+
+ int xStart = v0_x;
+ if(v0_x>offset_roi){ //Chequeo para no salirme del ancho de la pantalla
+ xStart = v0_x - offset_roi;
+ }
+
+ int yStart = 0;
+ if(v0_y > offset_roi){ //Chequeo para no salirme del alto de la pantalla
+ yStart = v0_y - offset_roi;
+ }
+
+ int width = abs( v2_x - xStart);
+ if(xStart + width > xsize){ //Chequeo para no salirme del ancho de la pantalla
+ width = xsize - xStart;
+ }
+
+ int height = abs(v2_y - yStart);
+ if(yStart + height > ysize){ //Chequeo para no salirme del alto de la pantalla
+ height = ysize - yStart;
+ }
+
+ return height*width;
+
+}
+
+double calcularPromedio(double* elementos,int largo){
+ double promedio = 0;
+ for(int i=0;i<largo;i++){
+ promedio+=elementos[i];
+ }
+ if(promedio!=0){
+ promedio = promedio/largo;
+ }
+ return promedio;
+}
+
+
+double calcularPromedio(int* elementos,int largo){
+ double promedio = 0;
+ for(int i=0;i<largo;i++){
+ promedio+=elementos[i];
+ }
+ if(promedio!=0){
+ promedio = promedio/largo;
+ }
+ return promedio;
+}
+
+int calcularMaximo(double* elementos, int largo){
+ int maximo = 0;
+ for(int i=0;i<largo;i++){
+ if((int)elementos[i]>maximo){
+ maximo= (int)elementos[i];
+ }
+ }
+ return maximo;
+}
+
+int calcularMinimo(double* elementos, int largo){
+ int minimo = 1000000;
+ for(int i=0;i<largo;i++){
+ if((int)elementos[i]<minimo){
+ minimo = (int)elementos[i];
+ }
+ }
+ return minimo;
+}