Modèle:Lo vers rvb/algo4/Documentation

Une page de Wikipédia, l'encyclopédie libre.

Implémentation[modifier le code]

Génération[modifier le code]

Ce script est basé sur l'intérpolation d'une table de correspondance lo RVB, trouvée sur une page de wikipedia (Efficacité lumineuse spectrale)

#!/usr/bin/python3

import re

wikicode_source = """
|-----
|rowspan=6| ||rowspan=6| 
|bgcolor="#1F0032" | <span style="color:white;">400</span> || <small>0.000039</small>
|bgcolor="#00BBA9" | <span style="color:white;">500</span> || <small>0.323</small>
|bgcolor="#FB9F00" | <span style="color:black;">600</span> || <small>0.631</small>
|bgcolor="#4B0030" | <span style="color:white;">700</span> || <small>0.004102</small>
|bgcolor="#000000" | <span style="color:white;">800</span> || <small>0.000004</small>
|-----
|bgcolor="#290042" | <span style="color:white;">410</span> || <small>0.00121</small>
|bgcolor="#00D2AF" | <span style="color:black;">510</span> || <small>0.503</small>
|bgcolor="#FD5600" | <span style="color:black;">610</span> || <small>0.503</small>
|bgcolor="#400029" | <span style="color:white;">710</span> || <small>0.002091</small>
|bgcolor="#000000" | <span style="color:white;">810</span> || <small>0.000002</small>
|-----
|bgcolor="#370059" | <span style="color:white;">420</span> || <small>0.004</small>
|bgcolor="#00E6B4" | <span style="color:black;">520</span> || <small>0.71</small>
|bgcolor="#EC0078" | <span style="color:white;">620</span> || <small>0.381</small>
|bgcolor="#350022" | <span style="color:white;">720</span> || <small>0.001047</small>
|bgcolor="#000000" | <span style="color:white;">820</span> || <small>0.000001</small>
|-----
|bgcolor="#460075" | <span style="color:white;">430</span> || <small>0.0116</small>
|bgcolor="#00F3AE" | <span style="color:black;">530</span> || <small>0.862</small>
|bgcolor="#D7007C" | <span style="color:white;">630</span> || <small>0.265</small>
|bgcolor="#2D001D" | <span style="color:white;">730</span> || <small>0.00052</small>
|bgcolor="#000000" | <span style="color:white;">830</span> || <small>0</small>
|-----
|bgcolor="#52008C" | <span style="color:white;">440</span> || <small>0.023</small>
|bgcolor="#00FB99" | <span style="color:black;">540</span> || <small>0.954</small>
|bgcolor="#C10076" | <span style="color:white;">640</span> || <small>0.175</small>
|bgcolor="#250018" | <span style="color:white;">740</span> || <small>0.000249</small>
|rowspan=6|&nbsp;||rowspan=6|&nbsp;
|-----
|bgcolor="#5700A1" | <span style="color:white;">450</span> || <small>0.038</small>
|bgcolor="#74FD00" | <span style="color:black;">550</span> || <small>0.99495</small>
|bgcolor="#AA006B" | <span style="color:white;">650</span> || <small>0.107</small>
|bgcolor="#1F0014" | <span style="color:white;">750</span> || <small>0.00012</small>
|-----
|bgcolor="#000000" | <span style="color:white;">360</span> || <small>0.000004</small>
|bgcolor="#5000BA" | <span style="color:white;">460</span> || <small>0.06</small>
|bgcolor="#ADF800" | <span style="color:black;">560</span> || <small>0.995</small>
|bgcolor="#94005E" | <span style="color:white;">660</span> || <small>0.061</small>
|bgcolor="#1A0011" | <span style="color:white;">760</span> || <small>0.00006</small>
|-----
|bgcolor="#000000" | <span style="color:white;">370</span> || <small>0.000012</small>
|bgcolor="#006EBC" | <span style="color:white;">470</span> || <small>0.09098</small>
|bgcolor="#CCED00" | <span style="color:black;">570</span> || <small>0.952</small>
|bgcolor="#7E0050" | <span style="color:white;">670</span> || <small>0.032</small>
|bgcolor="#16000E" | <span style="color:white;">770</span> || <small>0.00003</small>
|-----
|bgcolor="#11001C" | <span style="color:white;">380</span> || <small>0.000039</small>
|bgcolor="#008EAF" | <span style="color:white;">480</span> || <small>0.13902</small>
|bgcolor="#E3DC00" | <span style="color:black;">580</span> || <small>0.87</small>
|bgcolor="#6B0045" | <span style="color:white;">680</span> || <small>0.017</small>
|bgcolor="#13000C" | <span style="color:white;">780</span> || <small>0.000015</small>
|-----
|bgcolor="#170025" | <span style="color:white;">390</span> || <small>0.00012</small>
|bgcolor="#00A4A8" | <span style="color:white;">490</span> || <small>0.20802</small>
|bgcolor="#F2C300" | <span style="color:black;">590</span> || <small>0.757</small>
|bgcolor="#5A003A" | <span style="color:white;">690</span> || <small>0.00821</small>
|bgcolor="#000000" | <span style="color:white;">790</span> || <small>0.000007</small>
"""

lignes = re.split("\n", wikicode_source)
dico = {}
def i(v):
  return int(v,16)
for ligne in lignes:
  m = re.search(".*?#(..)(..)(..).*?[|].*?[>](.*?)[<].*?[|][|].*", ligne)
  if (m):
    g = m.groups()
    print (g[3]  ," ", end='')
    print (int (g[0],16)  , " ", end='')
    print (int (g[1],16)  , " ", end='')
    print (int (g[2],16)  , " ", end='')
    print ()
    dico [int(g[3])] = list(map ( i, g[0:3]))
print (sorted(dico.keys()))
for k in  sorted(dico.keys()):
    print (k, (dico[k]))

# Interpolation linéaire d'un segment
def interpolation_droite ( debut, fin, val1, val2):
    return u"1 * ( " + str(val1) + " + ( ({{{1|0}}}-"+str(debut)+")/("+str(fin)+"-"+str(debut)+") * (" + str (val2-val1) + ") ) ) * {{{2|1}}}  "
 
# Création du wikicode d'interpolation RVB d'un segment sur un pas de 10 nanomètres
def interpolation_rvb (i1i2, index , dico):
    #λ = 370+10*i
    #debut = 370+10*i
    #fin = 370+10*(i+1)
    debut = i1i2[0]
    fin   = i1i2[1]
    print (("| " + str(index) + "=<!-- " + str( debut ) + " < λ < " + str( fin ) + "\n"  ), end='')
    print (("-->&" + "#35;<!--" + "\n" + "-->") , end='')
    print (("{{Hexadécimal_sans_span|{{#expr: " + interpolation_droite(debut, fin, dico[debut][0], dico[fin][0]) + " }} |no }}<!-- R \n-->"), end='')
    print (("{{Hexadécimal_sans_span|{{#expr: " + interpolation_droite(debut, fin, dico[debut][1], dico[fin][1]) + " }} |no }}<!-- V \n-->"), end='')
    print (("{{Hexadécimal_sans_span|{{#expr: " + interpolation_droite(debut, fin, dico[debut][2], dico[fin][2]) + " }} |no }}<!-- B \n-->"), end='')
 
# Boucle principale
keys = sorted(dico.keys())
for i in  range(0,len(keys)):
    λ = keys[i]
    a = i %5
    if a == 0:
        choix = '|'.join( map(str,keys[i:i+5]))
        print ( "{{#switch: {{Quel intervalle|{{{1|}}}|"+choix+"}}" ,  end='')
 
    if (i==0):
        print ("|0=&#35;000000<!--\n-->",end='')
    else:
        interpolation_rvb(keys[i-1:i+1], a, dico)
 
    if a == 4:
        print ("| #default = " ,end='')
 
print ("| #default = " ,end='')
 
# Fermeture des instructions switch ouvertes
for repetition in range (0,50//5):
    print ("}}<!--   -->", end='')

Exemples[modifier le code]

Utilisation[modifier le code]

Description Wikicode Résultat
Longueur d'onde de 400nm {{Lo vers rvb/algo4|400|1}} Résultat : #1F0032
Longueur d'onde de 500nm {{Lo vers rvb/algo4|500|1}} Résultat : #00BBA9
Longueur d'onde de 650nm {{Lo vers rvb/algo4|650|1}} Résultat : #AA006B

Test du dégradé et de la continuité[modifier le code]

Exemple Référence [1] Ce modèle... Longueur d'onde en nanomètres
#030D6B #6E00A5 400 400
#00ff7f #00ff80 bgcolor=Modèle:Lo vers rvb/algo4500|500 500
#FA1105 #ff0000 650 650
400 400
433 433
466 466
500 500
533 533
566 566
600 600
633 633
666 666
700 700
bgcolor="Modèle:Lo vers rvb/algo4733"|733 733
400 400
433 433
466 466
500 500
533 533
566 566
600 600
633 633
666 666
700 700
733 733
500 510 520 530 540
540 550 560 570 580
580 590 600 610 620
620 630 640 650 660

Dégradé fin[modifier le code]

Test du modèle, en utilisant le modèle Modèle:Lo vers rvb/Démo dégradé pour créer des tableaux de dégradés sur la plage 400 à 700 nm.

Nom de l'exemple avec 16 pas pour 50nm Première couleur 2 3
400 403 406 409 413 416 419 422 425 428 431 434 438 441 444 447 450
Premier dégradé bleuatre 450 453 456 459 463 466 469 472 475 478 481 484 488 491 494 497 500
Deuxième dégradé verdatre 500 503 506 509 513 516 519 522 525 528 531 534 538 541 544 547 550
Troisième dégradé chaleureux 550 553 556 559 563 566 569 572 575 578 581 584 588 591 594 597 600
Quatrième dégradé rougeatre 600 603 606 609 613 616 619 622 625 628 631 634 638 641 644 647 650
650 653 656 659 663 666 669 672 675 678 681 684 688 691 694 697 700

Références[modifier le code]

  1. pierreontheweb.free.fr/RGB-wavelength/wavelength2RGB.htm