Module:Lambdacolor
Ce module génère le code couleur html 'rgb(r,g,b)' de la couleur approximative correspondant à une longueur d'onde donnée.
Utilisation[modifier le code]
Liste des fonctions exportées par le module sous la forme :
Lambdacolor(frame)
– retourne le code "rgb(r,g,b)" de la couleur correspondant à la longueur d'onde (en nanomètres) du premier argument (non nommé).
Modules externes et autres éléments dont ce module a besoin pour fonctionner :
mw.frame
– args[1] = longueur d'onde en nanomètres (entier)
Détails et fonctions internes
"rgb(0,0,0)" est retourné si la longueur d'onde sort de l'intervalle 381..709 nm
Une section en commentaire permet(tait) de tester les fonctions en 'standalone'; elle génère une page html avec un arc-en-ciel.
La conversion se fait via des tables de couleurs extraites de File:Spectrum-sRGB-low.svg qui donne les valeurs de 2 en 2 nanomètres. Comme c'est de toute façon approximatif, il n'est pas nécessaire d'interpoler. Il serait même probablement judicieux d'utiliser des tables plus courtes, quitte à interpoler.
Exemples[modifier le code]
- Raies du mercure à 405 nm(ultraviolet), 436 nm, 546 nm et un doublet vers 578 nm
- Triplet du magnésium vers 517 nm
- Doublet du sodium vers 589 nm
- Raie Hα de l'hydrogène à 656 nm
- {{#invoke:Lambdacolor|lambdacolor|589}} donne 'rgb(255,145,0)'
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Donne la couleur approximative d'une longueur d'onde : lambda_nm -> "rgb(r,g,b)"
-- Les valeurs proviennent de http://commons.wikimedia.org/wiki/File:Spectrum-sRGB-low.svg
-- [381 nm .. 709 nm] par pas de 2
-- usage {{#invoque:lambdacolor|lambdacolor|longueur_d_onde_en_nanometres}}
local c = {}
c.reds = {0,0,0,0,0,0,36,36,31,25,51,44,36,31,44,54,57,76,85,82,97,107,110,112,110,108,110,112,111,108,106,103,103,97,92,87,89,84,78,67,51,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,89,115,138,157,171,187,199,213,223,234,243,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,243,232,224,215,207,201,191,181,175,169,157,151,143,136,128,118,110,100,98,98,87,74,85,70,70,51,51,51,51,48,48,48,48,48,48,48} --
c.greens = {18,18,18,18,25,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,60,80,97,112,127,141,157,163,177,182,187,196,205,214,223,227,235,246,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,246,241,236,230,225,218,206,192,179,168,156,145,135,124,112,106,94,85,72,65,51,44,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} --
c.blues = {31,31,31,31,48,48,54,62,67,72,82,89,97,106,120,135,150,168,188,205,226,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,245,237,230,225,221,218,216,213,212,213,212,207,202,196,191,186,181,178,173,170,166,164,160,156,151,148,142,139,130,126,118,106,92,70,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,40,44,54,60,65,65,67,67,76,72,74,74,78,70,70,67,62,67,62,57,57,60,54,48,48,48,40,40,31,25,36,36,25,0,36,25,25,0,0,0,0,25,25,25,25,25,25,25} --
-- fonction exportée
function c.lambdacolor(frame)
local lambda = tonumber(frame.args[1])
if ((lambda < 381) or (lambda > 709)) then
return("rgb(0,0,0)")
end -- invisible
local idx = math.floor((lambda - 381)/2)+1
local r = c.reds[idx]
local g = c.greens[idx]
local b = c.blues[idx]
return ("rgb("..r..","..g..","..b..")") -- pas d'interpolation
end
--[[ -----------------------
-- TEST -- Décommenter pour tester en 'standalone'; génère une page .html avec dégrade
--
c.frame = {}
c.frame.args = {}
function plcolor(lambda)
c.frame.args[1] = lambda
print('<span style="background-color:'..c.lambdacolor(c.frame)..'">'..lambda..'</span><br/>')
end
print('<html><head></head><body>')
for wl = 381, 713, 2 do plcolor(wl) end
print('</body></html>')
---------------------- --]]
return c