Anterior

El espectro visible

Los colores del espectro visible se han generado mediante un programa Java adaptado por el autor del programa en PASCAL cuyo código fuente se ha publicado en la página web http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm.

Clase que convierte la longitud de onda en nm en color RGB, objeto de la clase Color.

import java.awt.Color;

public class Conversion {

 private static int  adjust(double  color, double factor){
     int result=0;
     if  (color == 0.0){
       result = 0;     
     }else{
         result= (int)Math.round(255 * Math.pow(color * factor, 0.80));
     }
     return result;
}

  public static Color wavelengthToRGB(double wave){
     double blue, factor, green, red;
      if(wave>=380 && wave<440){
          red = -(wave - 440) / (440 - 380);
          green= 0.0;
          blue= 1.0;
      }else if(wave>=440 && wave<490){
          red = 0.0;
          green= (wave - 440) / (490 - 440);
          blue= 1.0;
      } else if(wave>=490 && wave<510){
          red = 0.0;
          green= 1.0;
          blue= -(wave - 510) / (510 - 490);
      } else if(wave>=510 && wave<580){
          red = (wave - 510) / (580-510);
          green= 1.0;
          blue= 0.0;
      } else if(wave>=580 && wave<645){
          red = 1.0;
          green= -(wave - 645) / (645-580);
          blue= 0.0;
      } else if(wave>=645 && wave<=780){
          red = 1.0;
          green= 0.0;
          blue= 0.0;
      }else{
          red = 0.0;
          green= 0.0;
          blue= 0.0;
      }

      if(wave>=380 && wave<420){
         factor = 0.3 + 0.7*(wave - 380) / (420 - 380);
      }else if (wave>=420 && wave<701){
         factor = 1.0;
      }else if (wave>=701 && wave<=780){
         factor = 0.3 + 0.7*(780 - wave) / (780 - 700);
      }else{
          factor=0.0;
      }
      Color color=new Color(adjust(red, factor), adjust(green, factor), 
adjust(blue, factor)); return color; } }

Programa que crea la imagen del espectro visible

public class MiCanvas extends Canvas {
     Image visibleEspectro;

    public MiCanvas() {
    }

 void setNuevo(double aRendija){
     crearImagenes();
     repaint();
 }

 void dispositivo(Graphics g){
      if(visibleEspectro!=null){
            g.drawImage(visibleEspectro, 4*cAncho+2, cAncho, null);
        }
}
 void crearImagenes(){
    visibleEspectro=createImage(20, alto);
    Graphics gBuffer=visibleEspectro.getGraphics();
    gBuffer.setColor(getBackground());
    gBuffer.fillRect(0,0, 20, alto);
    visible(gBuffer);
    gBuffer=null;
 }
 void visible(Graphics g){
  for(int i=0; i<alto; i++){
      g.setColor(Conversion.wavelengthToRGB(380+i));
      g.fillRect(0, i, 20, 1);
    }
 }
}
Anterior