Modèle:Lo vers rvb/algo4
Ceci est la documentation du modèle {{Lo vers rvb/algo4}}.
Ce modèle est destiné à être appelé par le modèle {{Lo vers rvb}}, il ne devrait pas être utilisé directement.
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| ||rowspan=6|
|-----
|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=#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]- pierreontheweb.free.fr/RGB-wavelength/wavelength2RGB.htm
La documentation de ce modèle est générée par le modèle {{Documentation d'une sous-page de modèle}}.
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) et la page de test (créer).
Voir les statistiques d'utilisation du modèle sur l'outil wstat.