Paso 6: Conceptos básicos - colores
Hay dos maneras muy comunes de definir un color: los modelos RGB y HSB . Los dos son compatibles con MathVision, y su uso se describe en este paso.
Modelo RGB
Con el supuesto modelo RGB un color se define por su Red, Green y Blue componentes.
Para utilizar el modelo de color RGB, deberá definir su fórmula como rgb(x,y) o rgb(x,y,t).
En los pasos anteriores, recuerda que su función rgb utiliza color(luma) con un único argumento, para producir escalas de grises o blanco y negro. Ahora, para la salida de color, usted debe llamar a rgb con tres argumentos: color(red,green,blue). Cada argumento debe estar comprendida entre 0 y 255.
- color(255,0,0) es el rojo primario, color(0,255,0) es verde primaria color(0,0,255) es azul primario;
- color(0,0,0) es de color negro, el color(255,255,255) es blanco;
- color(127,0,0) es rojo oscuro.
Fórmula 1 (RGB)
WIDTH = 250; RATIO = 1; X_MIN = 0; X_MAX = 255; Y_MIN = 0; Y_MAX = 255; color rgb(x, y) { int radius = 80; int d1 = dist(x, y, 80, 175); int d2 = dist(x, y, 175, 175); int d3 = dist(x, y, 127, 80); int r = d1 < radius ? 255 : 0; int g = d2 < radius ? 255 : 0; int b = d3 < radius ? 255 : 0; return color(r, g, b); }
La fórmula anterior genera la primera imagen de este paso.
- Para el círculo rojo, tenemos contribución completa rojo (255) si estamos dentro de un círculo centrado en x = 80 y y = 175, si no tenemos 0.
- Similares para el verde y azul, con diferentes centros.
- Si estamos fuera de cualquier círculo, r, g y b son cero; tenemos negro, color (0, 0, 0) es de color negro.
¿Qué pasa si, en lugar de un fondo negro, queremos un fondo blanco? Esta es nuestra segunda foto y la segunda fórmula para este paso.
Fórmula 2 (RGB)
WIDTH = 250; RATIO = 1; X_MIN = 0; X_MAX = 255; Y_MIN = 0; Y_MAX = 255; color rgb(x, y) { int radius = 80; int d1 = dist(x, y, 80, 175); int d2 = dist(x, y, 175, 175); int d3 = dist(x, y, 127, 80); int r = d1 < radius ? 255 : 0; int g = d2 < radius ? 255 : 0; int b = d3 < radius ? 255 : 0; return r+g+b ? color(r, g, b) : color(255); }
La fórmula anterior es similar a la anterior, con este cambio en la última línea:
- Si todos los componentes son cero (es decir, r + g + b es cero) entonces estamos fuera de cualquier círculo y volvemos a color(255) que es blanco (y que es lo mismo que color(255,255,255) );
- de lo contrario. volver color(r,g,b) como antes.
Modelo HSB
El modelo HSB, en lugar de utilizar los componentes rojos, verdes y azules, un color se define por tres otros tipos de argumentos:
- H, el matiz, el color puro en la gama de colores posibles: 0 = rojo, 150 = azul;
- S, la saturación, cómo el color es vivo o se desvaneció: 50 = pastel, 255 = vivo;
- B, el brillo: 50 = oscuro, 255 = más ligero.
Fórmula 3 (HSB)
WIDTH = 250; RATIO = 1; X_MIN = 0; X_MAX = 255; Y_MIN = 0; Y_MAX = 255; color hsb(x, y) { int radius = 80; int b = dist(x, y, 127, 127) < 80 ? 64 : 255; return color(x, y, b); }
En la fórmula anterior, que produce la tercera foto de este paso, hacemos lo siguiente:
- Variar el tono con x (horizontal) y la saturación con la y (vertical). La parte superior de la imagen es viva, mientras que la parte inferior es tan descolorida que se convierte en blanco.
- Además, oscurece un disco centrado en el centro de la imagen a (127.127); Si estamos fuera del disco, fijamos b a 255 (brillo completo), si no a 64 (bastante oscuro).