Module:Lambdacolor

Une page de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Documentation du module Documentation du module[voir] [modifier] [purger]
La documentation de ce module est incluse depuis sa sous-page de documentation.

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 | 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 | 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 de l'hydrogène à 656 nm
  • {{#invoke:Lambdacolor|lambdacolor|589}} donne 'rgb(255,145,0)'


-- 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