Comunidad de diseño web y desarrollo en internet online

ayuda con logica de estos valores

Citar            
MensajeEscrito el 07 Oct 2009 02:50 pm
Hola, no soy muy bueno en este tipo de razonamiento y no se como resolverlo

Tengo ciertas cantidades guardadas en un array, que acomodo con sortOn
la menor 1654
...
algunas intermedias 1823, 2340, 3456, 7865, 12345, 15679, ...
..
la mayor 17560

Despues quiero representar en un mapa estas cantidades (son numeros totales de poblacion, p.e.). Entonces, en una escala de alpha 0 a 100 quiero colorear por decir:
si mi cantidad mayor 1750 fuera alpha 100%, entonces 5 etapas absolutas de alpha 80% 60% 40% 20% donde clasificar a las otras cantidades, es decir, si alguna cifra p.e. 3456 es apenas el 19.56% respecto al maximo 17560, entonces entra en los alphas menores a 20%

Espero me puedan entender este asunto, y que me puedan echar una ayudadita xfa!

Por comicSans

Claber

151 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Oct 2009 11:07 am
Si el máximo valor de la escala representa un 100%, sacar el resto es regla de 3 simple ... ¿cual es exactamente el problema?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Oct 2009 12:27 am
tenes q definir varias cosas.
un valorMax, donde alojaras el valor mayor
un valorMin, donde alojaras el valor menor
un valoresArray, que tendra todas las poblaciones
un porcentajeArray, que tendra los porcentaje de cada valor

entonces, debes recorrer el arreglo, valoresArray y decirle que te de el mayor y el menor.

algo asi:

Código ActionScript :

/*DECIDIR MAXIMO VALOR DE TAU----------------------------------------------------------*/
function decidir_max(arreglo:Array):void
{
nmax=0;
   for(var i:uint=0;i<arreglo.length;i++)
   {
      if (nmax<arreglo[i])
      {
         nmax=arreglo[i]
      }
   }
}
decidir_max(valoresArray);

y haces lo mismo para el menor.

luego, debes decirle que le asigne al nmax = 100%, o mejor dicho, le asigne a nmax el porcentaje mayor del arreglo porcentajeArray

y despues para cada uno de los valores preguntas:
por ejemplo:

Código ActionScript :

//si 
      nmax=100 //o nmax=porcentajeArray[1];
      valoresArray[i]= porcentajeArray[k] //porcentajeArray[k] es el q necesitas saber

// para calcularlo, simplemente haces:
porcentajeArray[k]=(valoresArray[i]*100)/nmax


y para redondear debes usar una funciona, esa puede servirte:
/*REDONDEAR DECIMALES SIMPLES---------------------------------------------------------*/
function round(qnum:Number, qdecimal:Number):Number
{
var decimal:Number = Math.pow(10, Math.round(qdecimal));
var num:Number = Math.round(qnum*decimal)/decimal;

return num;
}
// como necesitas que sea enteros, en qdecimal hacelo igual a 0:
round((porcentajeArray[k]),0)
[/as]

Espero hayas entendido y te sirva.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 09 Oct 2009 08:31 pm
Te agradezco tu aporte, mira lo resolvi, uff! un lio, pero creo que funciona OK:

Código PHP :

// "entitiesData" es el Array donde esta toda la info
var tonos:Number = 5; // DEFAULT DE ETAPAS 100%, 80%, 60%, 40%, 20%
function ajustarEtapa()
{
tonos = (isNaN(tonos)) ? 5 : (tonos>entitiesData.length) ? entitiesData.length : tonos;

var etapas:Array = new Array();  // GUARDO VALORES Y PORCENTAJES DE ETAPAS INTERMEDIAS

var valorMax:Number =  entitiesData[0].cifra1; // GUARDA VALOR MAS ALTO
var fijarPuntoCada:Number = 100/tonos;  // ETAPAS INTERMEDIAS

   for(var i:Number=1; i<=tonos; i++)
   {
   etapas.push({valor:valorMax/i, porcentaje:Number(100-Number(fijarPuntoCada*Number(i-1)))});
   }
   
   etapas.reverse(); // UN PEQUENHO AJUSTE ;)
   
   for(var i:Number=0; i<entitiesData.length; i++)
   {
   // AQUI VA A COMPARAR VALORES PARA FIJAR EN ESCALA
   var cifra:Number = entitiesData[i].cifra1;
   
     // BUCLE DE LAS ETAPAS DE TONOS
     for(var b:Number=0; b<etapas.length; b++)
     {
      var chkVal:Boolean = new Boolean(etapas[b-1].valor);
      var oldVal:Number = (chkVal==false) ? 0 : Number(etapas[b-1].valor);
      var newVal:Number = etapas[b].valor;
       
      if((cifra > oldVal) && (cifra < newVal))
      {
      /*
      EN ESTA CONDICION ESTOY AGRUPANDO LAS CANTIDADES
      EN LOS RANGOS DE ACUERDO A SUS RESPECTIVAS ETAPAS
      .... POR FIN! SALIO!!!!
      */
      trace (b+ '. CIFRA '+cifra+' | '+oldVal + ' - ' + newVal + ' - ' + typeof(cifra))
      }
     }
   }
}


Salu2!

Por comicSans

Claber

151 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.