Supongamos que tengo una clase RainbowColorsMapper con el constructor RainbowColorsMapper(int n), donde n>=2. Ahora quiero tener una asignación continua de arco iris de colores desde el rojo al violeta que puedo obtener con el método mapper.getColor(int number) donde los valores bajos corresponden a extremo rojo, y en lo alto cerca de la n a la del extremo violeta. Si n = 2, mapper.getColor(0) devuelve la mayoría de la izquierda el color del espectro (cerca de red), y mapper.getColor(1) devuelve el más a la derecha de color. Mismo con mayor n con escala automática.

Mi pregunta: ¿se puede hacer relativamente fácil, y si sí lo son sugerencias sobre el algoritmo?

  • Er: «RainbowColorsMapper(int n), donde n>=2» y «mapper.getColor(1) devuelve el más a la derecha de color»? ¿De qué estás hablando, Willis?
  • ¿Qué significa «Mismo con mayor n con la escala automática» significa?
InformationsquelleAutor bvk256 | 2011-04-01

6 Comentarios

  1. 7

    La manera más fácil de hacer esto será trabajar en la HSL espacio de colores en vez de RGB. Crear colores donde la saturación y la luminosidad son fijos (100% y 50%, yo sugeriría), y el tono varía entre apropiado extremos (que puede que tenga que experimentar para encontrar). Convertir la HSL valores RGB utilizando Color.getHSBColor.

    • Sí, parece el camino más fácil. Gracias por señalar en la dirección correcta.
  2. 1

    Recuerde que los colores del arco iris están ordenados de acuerdo a la longitud de onda, así que básicamente en el modelo, n de alguna manera está relacionado con la longitud de onda. Así que tu pregunta esencialmente se reduce a la asignación de longitud de onda (n) a RGB. Esto no es enteramente un proceso trivial, pero para empezar, se puede comprobar esta pregunta:

    Convertir la frecuencia de luz RGB?

    • Esta sería la mejor opción si la asignación de longitudes de onda no sería tan problemático.
  3. 0

    bastante fácil una vez que usted averiguar.
    El código debajo le permitirá ciclo de entre todos los existentes rbg colores

      private int r=255;
      private int g=0;
      private int b=0;
      private void nextRGB()
      {
        if ( r == 255 && g < 255 && b == 0 )
          {
          g++;
          }
        if ( g == 255 && r > 0 && b == 0 )
          {
          r--;
          }
        if ( g == 255 && b < 255 && r == 0 )
          {
          b++;
          }
        if ( b == 255 && g > 0 && r == 0 )
          {
          g--;
          }
        if ( b == 255 && r < 255 && g == 0 )
          {
          r++;
          }
        if ( r == 255 && b > 0 && g == 0 )
          {
          b--;
          }
      }
      public Color nextColor()
      {
      nextRGB();
      return makeColor();
      }
    
      private Color makeColor()
      {
        return new Color(r, g, b);
      }
    • Yo podría estar equivocado, pero de esa manera, siempre hay dos valores fijos, por lo que no será a mediados de tonos, derecho? Me refiero a 5,230,123por ejemplo no es posible…

Dejar respuesta

Please enter your comment!
Please enter your name here