Étape 6: Notions de base - couleurs
Il existe deux façons très communs de définir une couleur : les modèles RVB et TSL . Les deux sont pris en charge par MathVision, et leur utilisation est décrite dans cette étape.
Modèle RVB
Avec le soi-disant modèle RVB, une couleur est définie par Red, Green et Blue composants.
Pour utiliser le modèle de couleur RVB, vous définit votre formule comme rgb(x,y) ou rgb(x,y,t).
Lors des étapes précédentes, n’oubliez pas que votre fonction rgb utilisé color(luma) avec un seul argument, pour produire des échelles de gris ou noir et blancs. Maintenant, pour la sortie de couleur, vous devez appeler RVB avec trois arguments : color(red,green,blue). Chaque argument doit varier de 0 à 255.
- Color(255,0,0) est le rouge primaire, color(0,255,0) est vert primaire, color(0,0,255) est bleu primaire ;
- Color(0,0,0) noir, color(255,255,255) est blanc ;
- Color(127,0,0) est rouge foncé.
Formule 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 formule ci-dessus génère la première image de cette étape.
- Pour le cercle rouge, nous avons contribution intégral-rouge (255) si nous sommes à l’intérieur d’un cercle centré en x = 80 et y = 175, dans le cas contraire, nous avons 0.
- Similaires pour le vert et bleu, avec différents centres.
- Si nous sommes en dehors de n’importe quel cercle, r, g et b sont tous nul ; nous obtenons noirs, parce que (0, 0, 0) est noire.
Que se passe-t-il si, au lieu d’un fond noir, nous voulons un fond blanc ? Il s’agit de notre deuxième photo et la deuxième formule pour cette étape.
Formule 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 formule ci-dessus est similaire à la précédente, avec ce changement à la dernière ligne :
- Si toutes les composantes sont nulles (c'est-à-dire r + g + b est égal à zéro), puis nous sommes à l’extérieur d’un cercle, et nous retournons color(255) qui est blanc (et qui est le même que color(255,255,255) ) ;
- dans le cas contraire. retour color(r,g,b) comme avant.
Modèle TSL
Pour le modèle TSL, au lieu d’utiliser les composantes rouges, vert et bleu, une couleur est définie par trois autres types d’arguments :
- H, la teinte--la couleur pure dans la gamme de couleurs possibles: 0 = rouge, 150 = bleu ;
- S, la saturation--comment les couleurs sont vives ou Fané : 50 = pastel, 255 = vives ;
- B, la luminosité : 50 = noir, 255 = plus léger.
Formule 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); }
Dans la formule ci-dessus, ce qui donne la troisième photo de cette étape, nous faisons ce qui suit :
- Varier la teinte avec x (horizontale) et la saturation avec y (verticale). Le haut de l’image est vif, tandis que le fond est tellement délavé qu’il devient blanc.
- En outre, nous assombrir un disque centré au milieu de l’image au (127 127) ; Si nous sommes à l’extérieur du disque, nous avons mis b à 255 (intensité maximum), sinon à 64 (assez sombre).