Revision 2102 branches/gvSIG_03_SLD/applications/appgvSIG/src/com/iver/cit/gvsig/gui/thememanager/legendmanager/panels/NaturalIntervalGenerator.java

View differences:

NaturalIntervalGenerator.java
60 60
	private int miNumIntervalosSolicitados;
61 61
	private int miNumIntervalosGenerados;
62 62
	private double[] mdaValoresRuptura;
63
	private double[] mdaValInit;
63 64

  
64 65
	/**
65 66
	 * Crea un nuevo IntervalGenerator.
......
210 211
			//      'S?lo se pueden generar dos intervalos -> hay un valor de ruptura
211 212
			///ReDim mdaValoresRuptura(0)
212 213
			mdaValoresRuptura[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor;
214
			mdaValInit[0] = ((udtDatosEstudio) lVectorDatos.get(0)).Valor;
213 215
			miNumIntervalosGenerados = 2;
214 216

  
215 217
			return true;
......
227 229
		llaIndicesRupturas = new int[liNumClasesReales - 1];
228 230
		llNumElementosPorClase = (lVectorDatos.size()) / liNumClasesReales;
229 231

  
230
		for (i = 0; i <llaIndicesRupturas.length; i++) {
232
		for (i = 0; i < llaIndicesRupturas.length; i++) {
231 233
			if (i == 0) {
232 234
				llaIndicesRupturas[i] = llNumElementosPorClase - 1;
233 235
			} else {
......
236 238
			}
237 239
		}
238 240

  
239
		udtDatosClase[] ldaSDCM_Parciales = new udtDatosClase[llaIndicesRupturas.length+1];
240
		udtDatosClase[] ldaSDCM_Validos = new udtDatosClase[llaIndicesRupturas.length+1];
241
		udtDatosClase[] ldaSDCM_Parciales = new udtDatosClase[llaIndicesRupturas.length +
242
			1];
243
		udtDatosClase[] ldaSDCM_Validos = new udtDatosClase[llaIndicesRupturas.length +
244
			1];
241 245

  
242 246
		///ReDim ldaSDCM_Parciales(UBound(llaIndicesRupturas()) + 1)
243 247
		///ReDim ldaSDCM_Validos(UBound(ldaSDCM_Parciales()) + 1)
244
		if (llaIndicesRupturas.length==0)return true;
248
		if (llaIndicesRupturas.length == 0) {
249
			return true;
250
		}
251

  
245 252
		//  'Calcular la bondad inicial
246 253
		if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales, llaIndicesRupturas,
247
					ldSDAM[0], ldUltimaGVF, -1,false)) {
254
					ldSDAM[0], ldUltimaGVF, -1, false)) {
248 255
			return false;
249 256
		}
250 257

  
......
350 357
						llIndiceRupturaOriginal = llaIndicesRupturas[i];
351 358

  
352 359
						if (lbMoverADerecha) {
353
							if (i == llaIndicesRupturas.length-1) {
360
							if (i == (llaIndicesRupturas.length - 1)) {
354 361
								if ((llaIndicesRupturas[i] + 1) >= lVectorDatos.size()) {
355 362
									exit = true;
356 363
								}
......
376 383
								}
377 384
							} //'If i = LBound(llaIndicesRupturas) Then
378 385

  
379
							llaIndicesRupturas[i] = llaIndicesRupturas[i]-1;//////////////////
386
							llaIndicesRupturas[i] = llaIndicesRupturas[i] - 1; //////////////////
380 387
						} //'If lbMoverADerecha Then
381 388

  
382 389
						if (!mbCalcularGVF(lVectorDatos, ldaSDCM_Parciales,
......
407 414

  
408 415
		//   'A partir de aqu? ya no se puede cancelar nada
409 416
		mdaValoresRuptura = new double[llaIndicesRupturas.length];
417
		mdaValInit = new double[llaIndicesRupturas.length];
410 418

  
411 419
		for (i = 0; i < mdaValoresRuptura.length; i++) { // LBound(mdaValoresRuptura) To UBound(mdaValoresRuptura)
412 420
			mdaValoresRuptura[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor;
413 421

  
422
			if ((llaIndicesRupturas[i] + 1) < lVectorDatos.size()) {
423
				mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i] +
424
						1)).Valor;
425
			} else {
426
				mdaValInit[i] = ((udtDatosEstudio) lVectorDatos.get(llaIndicesRupturas[i])).Valor;
427
			}
428

  
414 429
			//      'Hay que aplicar una peque?a correcci?n a los valores de ruptura para que los intervalos que genera
415 430
			//    'mapobjects se aprechen en su totalidad, o lo que es lo mismo, vengan todos representados en el mapa.
416 431
			//  'Con esto tambi?n se consigue hallar intervalos equivalentes a los de ArcView. Esta correcci?n consiste
......
425 440

  
426 441
		return true;
427 442
	}
428
	private udtDatosClase[] getArray(udtDatosClase[] array){
429
		udtDatosClase[] aux=new udtDatosClase[array.length];
430
		for (int i=0;i<array.length;i++){
431
			aux[i]=new udtDatosClase();
432
			aux[i].Media=array[i].Media;
433
			aux[i].NumElementos=array[i].NumElementos;
434
			aux[i].SDCM=array[i].SDCM;
435
			aux[i].SumaCuadradoTotal=array[i].SumaCuadradoTotal;
436
			aux[i].SumaTotal=array[i].SumaTotal;
443

  
444
	/**
445
	 * DOCUMENT ME!
446
	 *
447
	 * @param array DOCUMENT ME!
448
	 *
449
	 * @return DOCUMENT ME!
450
	 */
451
	private udtDatosClase[] getArray(udtDatosClase[] array) {
452
		udtDatosClase[] aux = new udtDatosClase[array.length];
453

  
454
		for (int i = 0; i < array.length; i++) {
455
			aux[i] = new udtDatosClase();
456
			aux[i].Media = array[i].Media;
457
			aux[i].NumElementos = array[i].NumElementos;
458
			aux[i].SDCM = array[i].SDCM;
459
			aux[i].SumaCuadradoTotal = array[i].SumaCuadradoTotal;
460
			aux[i].SumaTotal = array[i].SumaTotal;
437 461
		}
438
	return aux;
462

  
463
		return aux;
439 464
	}
465

  
440 466
	/**
441 467
	 * Devuelve la "SDAM" de un conjunto de datos que vienen almacenados en el
442 468
	 * vector rVectorDatos
......
624 650

  
625 651
			//'Falta la ?ltima clase
626 652
			if (!mbGetDatosClase(rVectorDatos,
627
						rlaIndicesRuptura[rlaIndicesRuptura.length-1] + 1,
628
						rVectorDatos.size()-1, raClases, raClases.length-1)) {
653
						rlaIndicesRuptura[rlaIndicesRuptura.length - 1] + 1,
654
						rVectorDatos.size() - 1, raClases, raClases.length - 1)) {
629 655
				return false;
630 656
			}
631 657
		} else {
......
634 660
			//'Hay que determinar para qu? clases debemos volver a recalcular los datos en funci?n del ?ndice de ruptura que estamos modificando
635 661
			if (vbDesplazAIzquierda) {
636 662
				//  'Recalcular los datos de la clase izquierda
637
				if (!mbRecalcularDatosClase(raClases,i, rVectorDatos,
663
				if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
638 664
							rlaIndicesRuptura[i] + 1, vdSDAM, false)) {
639 665
					return false;
640 666
				}
641 667

  
642 668
				//  'Recalcular los datos de la clase derecha
643
				if (!mbRecalcularDatosClase(raClases,i + 1, rVectorDatos,
669
				if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
644 670
							rlaIndicesRuptura[i] + 1, vdSDAM, true)) {
645 671
					return false;
646 672
				}
647 673
			} else {
648 674
				//  'Recalcular los datos de la clase izquierda
649
				if (!mbRecalcularDatosClase(raClases,i, rVectorDatos,
675
				if (!mbRecalcularDatosClase(raClases, i, rVectorDatos,
650 676
							rlaIndicesRuptura[i], vdSDAM, true)) {
651 677
					return false;
652 678
				}
653 679

  
654 680
				//  'Recalcular los datos de la clase derecha
655
				if (!mbRecalcularDatosClase(raClases,i + 1, rVectorDatos,
681
				if (!mbRecalcularDatosClase(raClases, i + 1, rVectorDatos,
656 682
							rlaIndicesRuptura[i], vdSDAM, false)) {
657 683
					return false;
658 684
				}
......
701 727

  
702 728
		// 'Inicializamos los datos de la clase
703 729
		rClase[numClas] = new udtDatosClase();
704
		
730

  
705 731
		//'Hallamos la media de la clase
706
		for (i = vlLimiteInf; i < vlLimiteSup+1; i++) {
732
		for (i = vlLimiteInf; i < (vlLimiteSup + 1); i++) {
707 733
			rClase[numClas].NumElementos = rClase[numClas].NumElementos +
708 734
				((udtDatosEstudio) rVectorDatos.get(i)).Coincidencias;
709 735

  
......
730 756
	 * Recalcula los datos de las clases.
731 757
	 *
732 758
	 * @param rClase Clases.
759
	 * @param i ?adir ?adir ?adir ?adir indica si a la clase se le a?ade un
760
	 * 		  elemento (True) o se le quita (False)
733 761
	 * @param rVectorDatos Datos.
734 762
	 * @param vlIndiceElemento es el ?ndice del elemento que se le va a?adir o
735 763
	 * 		  a quitar a la clase
736 764
	 * @param vdSDAM desviaci?n standard.
737
	 * @param vbA ?adir ?adir ?adir ?adir indica si a la clase se le a?ade un
738
	 * 		  elemento (True) o se le quita (False)
765
	 * @param vbA ?adir DOCUMENT ME!
739 766
	 *
740 767
	 * @return True si se ha calculado correctamente.
741 768
	 */
742
	private boolean mbRecalcularDatosClase(udtDatosClase[] rClase,int i,
769
	private boolean mbRecalcularDatosClase(udtDatosClase[] rClase, int i,
743 770
		ArrayList rVectorDatos, int vlIndiceElemento, double vdSDAM,
744 771
		boolean vbA?adir) {
745 772
		double ldValor;
......
760 787
			//'Actualizamos el producto total
761 788
			//'rClase.ProductoTotal = rClase.ProductoTotal * (ldValor * llNumCoincidencias)
762 789
			//'Actualizamos el n? de elementos
763
			rClase[i].NumElementos = rClase[i].NumElementos + llNumCoincidencias;
790
			rClase[i].NumElementos = rClase[i].NumElementos +
791
				llNumCoincidencias;
764 792
		} else {
765 793
			//'Actualizamos la suma total
766 794
			rClase[i].SumaTotal = rClase[i].SumaTotal -
......
773 801
			// 'Actualizamos el producto total
774 802
			// 'rClase.ProductoTotal = rClase.ProductoTotal / (ldValor * llNumCoincidencias)
775 803
			// 'Actualizamos el n? de elementos
776
			rClase[i].NumElementos = rClase[i].NumElementos - llNumCoincidencias;
804
			rClase[i].NumElementos = rClase[i].NumElementos -
805
				llNumCoincidencias;
777 806
		} // 'If vbA?adir Then
778 807

  
779 808
		//'Obtenemos la nueva media
......
800 829
	}
801 830

  
802 831
	/**
832
	 * Devuelve el valor inicial de cada intervalo
833
	 *
834
	 * @param index ?ndice del intervalo
835
	 *
836
	 * @return valor del intervalo.
837
	 */
838
	public double getValInit(int index) {
839
		return mdaValInit[index];
840
	}
841

  
842
	/**
803 843
	 * Devuelve el n?mero de intervalos que se pueden representar, no tiene
804 844
	 * porque coincidir con el n?mero de intervalos que se piden.
805 845
	 *

Also available in: Unified diff