Regra de três simplificada (Map do Processing)

Se tem uma coisa que programador Flash faz muito é regra de três, esta pequena formula matemática é executada diversas vezes dentro de um projeto, e ela é usada para transferir um valor dentro de um intervalo de números para o valor equivalente em um outro intervalo de números. Pro exemplo, no loading de uma imagem você sabe quantos bytes tem a imagem e quantos bytes já foram carregados, agora como calcular o percentual de carregamento? Vamos supor que a imagem tenha 300 bytes e já foram carregados 150 então temos 50% carregado, para chegar a este resultado de uma forma fácil e padronizada:

1
trace(NumberUtils.map(150, 0, 300, 0, 100));

Converti o script escrito originalmente em Processing e Arduino para ActionScript 3.0, agora é só usar.

Mais exemplos de uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
import br.com.bsoares.utils.NumberUtils;

trace(NumberUtils.map(50, 0, 100, 0, 10));
// 5

trace(NumberUtils.map(90, 0, 100, 0, 10));
// 9

trace(NumberUtils.map(90, 100, 0, 0, 10));
// 1

trace(NumberUtils.map(-90, -100, 100, 0, 10));
// 0.5

Classe completa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * NumberUtils
 *
 * @author Bruno Soares
 * @link http://www.bsoares.com.br
 */


package br.com.bsoares.utils
{
    public class NumberUtils
    {
        public function NumberUtils() { }

        /**
         * Transfere um valor de um intervalo para outro.
         * Versão original escrita em Processing (http://processing.org/reference/map_.html).
         *
         * @param value Valor a ser transferido
         * @param inMin Menor valor do primeiro intervalo
         * @param inMax Maior valor do primeiro intervalo
         * @param outMin Menor valor do segundo intervalo
         * @param outMax Maior valor do segundo intervalo
         *
         * @return Valor calculado
         */

        public static function map(value:Number, inMin:Number, inMax:Number, outMin:Number, outMax:Number):Number
        {
            return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
        }
    }
}

Links relacionados:
Processing: http://processing.org/reference/map_.html
Arduino: http://arduino.cc/en/Reference/Map
Regra de Três: http://pt.wikipedia.org/wiki/Regra_de_tr%C3%AAs, http://www.somatematica.com.br/fundam/regra3s.php

Enjoy


Posts relacionados:

  1. Operações binárias
  2. JPEG Encoder (AS3) + FluorineFx .NET Flash Remoting Gateway
  3. JPGEncoder (AS3) com AMFPHP
  4. Flickr – Buscar fotos por Tag com ActionScript
  5. Vector em AS3 para Flash Player 10

  1. darmowe filmy hotfile…

    [...]Regra de três simplificada (Map do Processing) | Bruno Soares[...]…

  2. Eisprungkalender…

    [...]Regra de três simplificada (Map do Processing) | Bruno Soares[...]…

  3. eisprungkalender…

    Vielen Dank für die nützlichen Infos….

Leave a Reply