Aller au contenu

Module:Lambdacolor

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 1 avril 2013 à 13:28 et modifiée en dernier par Hexasoft (discuter | contributions) (test). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]

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

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

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

-- des lignes vides pour voir si ça change quelque chose




-- encore


-- et encore


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