int
CargarPartida(char * nombreArchivo,tipoError *error){
/*Devuelve una partida, modifica 'error' si lo hubo*/

    FILE * pPartida;
    int i;
    partida juegoT;

    pPartida = fopen(nombreArchivo,"r");
    if(pPartida == NULL) {
        *error = LECTURA_INVALIDA;
        return juegoT;
    }else{
        fread(&juegoT.matActual, sizeof(juegoT.matActual),1,pPartida);
        fread(&juegoT.cantUndos,sizeof(juegoT.cantUndos),1,pPartida);
        fread(&juegoT.puntaje,sizeof(juegoT.puntaje),1,pPartida);
        fread(&juegoT.dim,sizeof(juegoT.dim),1,pPartida);
        fread(&juegoT.condGanar,sizeof(juegoT.condGanar),1,pPartida);

        juegoT.matActual = creaMatriz(juegoT.dim);
            for (i=0; i<juegoT.dim ; i++)
                fread(juegoT.matActual[i],sizeof(juegoT.matActual[0][0]),juegoT.dim,pPartida);
            }
        }
示例#2
0
文件: funciones.c 项目: Miguelrn/TFG
pos *sga(float *imagen, int num_endmembers, int muestras , int lineas, int bandas){
	//solucion = (pos*) malloc(num_endmembers*sizeof(pos));
	int n = 1, i = 0, j = 0, primeraVuelta = 1,x;
	double volumen = 0.0;
	srand(time(NULL));
	float *endmember;
	if(DEBUG) printf("muestras: %d, filas: %d, bandas %d\n", muestras, lineas, bandas);

	pos *endmember_index = (pos*) malloc((num_endmembers)*sizeof(pos));//vamos a tener 19 puntos de endmembers
	endmember_index[0].filas = rand() % lineas;//221
 	endmember_index[0].columnas = rand() % muestras;//325
	if(DEBUG) printf("la posicion al azar es: %d - %d\n",endmember_index[0].columnas,endmember_index[0].filas);


	while(n < num_endmembers){
		endmember = (float*) malloc(num_endmembers*num_endmembers*sizeof(float));//como maximo va tener p * p elementos, n x n en cada vuelta y se resetea

		for(i = 0; i < n; i++){//para n
			for(j = 0; j < n; j++){//para las bandas
				endmember[i*(n)+j] = imagen[endmember_index[i].columnas + endmember_index[i].filas*muestras + muestras*lineas*j];//flipa pepinillos !
			}	
		}
		pos *newendmember_index = (pos*) malloc(1*sizeof(pos));
		double maxVolumen = 0.0;
		int factorial = 1;
		for(i = n; i > 0; i--)
			factorial *= i;

		for(i = 0; i < muestras; i++){
			for(j = 0; j < lineas; j++){
				//le pasamos el endmember y los puntos i j que vamos a usar, devuelve el array hasta n de ese punto
				float *jointpoint = (float*) malloc ((n*n+n+(n+1))*sizeof(float));;
				creaMatriz(endmember, i , j, imagen, n, muestras, lineas, jointpoint);//esta funcion hace jointpoint, transpone la matriz y hace matrixjoinpoint(unos en la primera fila)
	
				volumen = calculaVolumen(jointpoint, n+1, factorial);//se calcula sobre una matriz (n+1)*(n+1)
				//if(n==1 && global && i == 349 && j == 296){printf("%f  \n",volumen); }
				if(volumen > maxVolumen){
					maxVolumen = volumen;
					//if(DEBUG)printf("Volumen(%d)[%d][%d]: %f\n",n,i,j,volumen);
					newendmember_index[0].columnas = i;
					newendmember_index[0].filas = j;
				}
				free(jointpoint);
			}
		}		
		endmember_index[n].columnas = newendmember_index[0].columnas;
		endmember_index[n].filas = newendmember_index[0].filas;
		n++;printf("Valor del maxVolumen: %f\n",maxVolumen);//<- 18 y 19 no caben en float??????????
	
		if(primeraVuelta){//endmeber_index va tener valores pero creo que no se van a usar, si falla mirar aqui
			n = 1;
			endmember_index[0].filas = newendmember_index[0].filas;
			endmember_index[0].columnas = newendmember_index[0].columnas;
			primeraVuelta--;
		}		
		//printf("\n\n");
		free(newendmember_index);
		free(endmember);
	}

	return endmember_index;

}