Télécharger le fichier Maple "zippé"

parag. 1   parag. 2   parag. 3  

Mires des couleurs RGB, HSV, HUE




HELP Maple .

COLOR :

Color may be specified in three different ways. RGB color specification requires three floating point values for each color.

The three values must each be between 0 and 1 and specify the amount of red, green, and blue light in the final color.

For example, COLOR(RGB,1.0,0.0,0.0) is red while COLOR(RGB,1.0,1.0,0.0) is yellow.

The HSV color specification also requires three numbers for each color.

The fractional portion of the first value indicates the color and the remaining two values give the purity (saturation) and the brightness of the color.

The latter two values must be between zero and one.

The HUE color specification only requires a single floating point value and cycles through the colors of the spectrum based on the fractional part of the value.

For example COLOR(HUE,0.9) is violet while COLOR(HUE,0.1) is red. COLOR(HUE, x) is equivalent to COLOR(HSV,x, 0.9, 1.0).

Définitions trouvées :

saturation : proportion de couleur chromatiquement pure contenue dans la sensation visuelle totale (?)
Intuitivement la saturation correspond à l'aspect plus ou moins dilué de la couleur.

brillance ou luminance ou luminosité : quotient de l'intensité lumineuse d'une source dans une direction donnée et de l'aire apparente dans la même direction.

Intuitivement la brillance correspond à l'aspect plus ou moins vif d'une couleur

Début  

I. COLOR(RGB,u,v,w)

tableau d'un échantillon de teintes avec les valeurs correspondantes des paramètres

Prendre l'option plotdisplay en "WINDOWS" car en "INLINE" on ne voit pas grand'chose ou alors il faut agrandir à la main.

restart:
with(plots):

plage_RGB := proc(rouge,vert,bleu)
local Rinf, Rsup, Rint, Ginf, Gsup,Gint, Binf, Bsup, Bint,
n,p,q,tvert,trouge,tbleu,mire,i,j,k;
Rinf:=rouge[1]*1.: Rsup:=rouge[2]*1.: Rint := Rsup-Rinf:
Ginf:=vert[1]*1.: Gsup:=vert[2]*1.: Gint := Gsup-Ginf:
Binf:=bleu[1]*1.: Bsup:=bleu[2]*1.: Bint := Bsup-Binf:
# (nbre - 1) de nuances : n : rouge ; p : vert ; q : bleu . On peut changer ces valeurs
n:=8: p:=8: q:=8:
mire:=seq(seq(seq(
polygonplot([[Rinf+Rint*(i/(n+2.)+k),Ginf+Gint*j],
[Rinf+Rint*((i+1)/(n+2.)+k),Ginf+Gint*j],
[Rinf+Rint*((i+1)/(n+2.)+k),Ginf+Gint*(j+0.9)], [Rinf+Rint*(i/(n+2.)+k),Ginf+Gint*(j+0.9)]],
color=COLOR(RGB,Rinf+Rint*i/n,Ginf+Gint*j/p,Binf+Bint*k/q)),i=0..n),j=0..p),k=0..q):
tvert:=textplot([Rinf+Rint*(-0.5),Ginf+Gint*(p+1),"Vert"]),
seq(textplot([Rinf+Rint*(-0.5),Ginf+Gint*(i+0.5),
substring(convert(Ginf+i/p*Gint,string),1..3)]),i=0..p):
tbleu:=textplot([Rinf+Rint*(-0.2),Ginf+Gint*(-0.3),"Bleu ->"]),
seq(textplot([Rinf+Rint*(i+0.5),Ginf+Gint*(-0.3),
substring(convert(Binf+i/q*Bint,string),1..3)]),i=0..q):
trouge:=textplot([Rinf+Rint*(-0.3),Ginf+Gint*(-1),"Rouge ->"]),
seq(seq(textplot([Rinf+Rint*((i+0.5)/(n+2.)+j),Ginf+Gint*(-0.6-i/(n-0.99)),
substring(convert(Rinf+Rint*(i/n),string),1..3)],
font=[TIMES,ROMAN,8]),i=0..n),j=0..q):
display([mire,tvert,tbleu,trouge], title="COLOR(RGB,u,v,w)",axes=none);
end :


plotsetup(windows): # grand affichage ??
# Plages R=0..1,G=0..1,B=0..1
plage_RGB([0,1],[0,1.],[0,1]);

Voir l'image

# Si on veut affiner les nuances
# Plages R=0.8..1,G=0.7..0.8,B=0..0.25
plage_RGB([0.8,1],[0.7,0.8],[0,0.25]);

#ainsi on peut lire que COLOR(RGB,1,0.750,0.125) correspond à un jaune-orange abricot

#exemple
with(plots):

with(plottools):
display(disk([0,0],1,color=COLOR(RGB,0.97,0.78,0)),scaling =constrained);

Début  

II. COLOR(HSV,u,v,w)

La rangée supérieure est la liste des n couleurs pour la plage choisie du paramètre u, pour v=0.9 et w=1.0 [ce qui correspond COLOR(HUE,u)].

le reste du tableau sont ces mêmes n couleurs pour les (p+1) et (q+1) valeurs respectivement des paramètres v(saturation) et w(luminosité) .

Prendre l'option plotdisplay en "WINDOWS" car en "INLINE" on ne voit pas grand'chose ou alors il faut agrandir à la main.

restart:
with(plots):

# 0 <= dep < fin <= 1 ,[dep..fin] plage des couleurs étudiées
plage_HSV:=proc(dep,fin)
local n,p,q,sat,lum,plage,u,v,w,lumi,satur,coul,couleurs,mire,i;
n:=20; p:=3; q:=4; # nombre de valeurs prises par la couleur, la saturation, la luminosité
sat :=0.5 ; lum:=0.5;#valeurs de départ de saturation et luminosité
# les valeurs faibles de la saturation v et la luminance w sont peu intéressantes (nuances très sombres)
# les variables sat et lum sont les valeurs de début examinées : sat < v <1. et lum < w < 1.
#Toutes ces valeurs peuvent être changées en respectant : 0 <= sat < 1 et 0 <= lum < 1
plage := fin-dep :
mire:=seq(seq(seq(
polygonplot([[dep+plage*(u/(n+1)+w),v],[dep+plage*((u+1)/(n+1)+w),v],
[dep+plage*((u+1)/(n+1)+w),v+0.9],[dep+plage*(u/(n+1)+w),v+0.9]],
color=COLOR(HSV,dep+plage*u/n,v/p*(1-sat)+sat,w/q*(1-lum)+lum)),u=1..n),v=0..p),w=0..q):
couleurs:=seq( polygonplot([[dep+plage*(u-0.6)/n*(q+1),p+1],
[dep+plage*(u+0.3)/n*(q+1),p+1],
[dep+plage*(u+0.3)/n*(q+1),p+1.9],
[dep+plage*(u-0.6)/n*(q+1),p+1.9]],
color=COLOR(HSV,dep+plage*u/n,0.99,1.)),u=1..n):
lumi:=textplot([dep,-0.2,"brillance(w) --->"]),
seq(textplot([dep+plage*(i+0.5),-0.2,substring(convert(i/q*(1-lum)+lum,string),1..3)],
font=[TIMES,ROMAN,8]),i=0..q):
satur:= textplot([dep-0.1*plage,p+1,"saturation(v)"]),
seq(textplot([dep-0.1*plage,i+0.5,substring(convert(i/p*(1-sat)+sat,string),1..3)],
font=[TIMES,ROMAN,8]),i=0..p):
coul:= textplot([dep-0.1*plage,p+2.1,"couleurs(u)"]),
seq(textplot([dep+plage*(q+1)*i/n,p+2.1,substring(convert(dep+plage*(i/n/1.),string),1..3)],
font=[TIMES,ROMAN,8]),i=1..n): display({mire,lumi,satur,coul,couleurs},
title="COLOR(HSV,u,v,w)", axes=none);,
end:



# Faire afficher en window ??
plotsetup(window):
plage_HSV(0.1,1.);plotsetup(inline):

Voir l'image

On peut affiner l'étude d'une nuance de jaune par exemple : ayant constaté avec la plage de couleur [0, 1] que le jaune se trouvait vers 0.15,

on relance avec dep = 0.12 et fin=0.18

plage_HSV(0.12,0.18);

Voir l'image

Début  

III. COLOR(HUE,u)

voir la première rangée du tableau précédent.

restart:
with(plots):
colorHue:= proc(dep,fin,n)
local plage,u:

## n = nombre de couleurs affichées.

# les n couleurs sont prises dans la plage [ dep .. fin ] avec bien sur dep < fin.

# Toutes ces valeurs peuvent être changées.
plage := fin-dep :
display(seq(
polygonplot([[dep + u/(n+1)*plage,0],[dep +(u+1)/(n+1)*plage,0],
[dep +(u+1)/(n+1)*plage,1],[dep +u/(n+1)*plage,1]],
color=COLOR(HUE,dep +u/n*plage)),u=1..n),
title="COLOR(HUE,u)",labels=["couleurs x=n*u",""]);
end:

plotsetup(inline): # en inline, ça suffit
colorHue(0,1,40);

Voir l'image



Début