Page 1 of 2

Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 18 May 2019, 12:21
by Admin
11251A la rentrée 2019 en Seconde le Python est au programme de Physique-Chimie, pour représenter graphiquement divers phénomènes physiques.

Une seule calculatrice graphique offre à ce jour un langage Python disposant de capacités graphiques, la NumWorks.

UnCurieux te propose dès maintenant un script NumWorks s'inscrivant parfaitement dans ce nouveau contexte scolaire, visible_spectrum.py dont l'appel spectrum() te dessinera une représentation du spectre des rayonnements visibles.

En fin de tracé, tu pourras même saisir des longueurs d'onde, et voir à quelles couleurs elles correspondent. ;)

11252Avertissement à tous les codeurs NumWorks dont les scripts manipulent des couleurs.

La version bêta 11.0.0 actuellement en phase de tests change le comportement de la fonction kandinsky.color(r,g,b), qui ne renvoie plus un nombre mais un tuple.

L'avantage est de permettre la récupération facile des différentes composantes RVB au codeur débutant, exactement comme avec une liste. Un changement une fois de plus dans les temps et en parfaite adéquation avec l'évolution des programmes scolaires du lycée à la rentrée 2019 ! :bj:

Toutefois, selon comment les scripts déjà existants récupéraient et utilisaient la valeur retour de cette fonction, certains pourront ne plus fonctionner correctement lors d'une prochaine mise à jour NumWorks. Notamment ceux qui en récupéraient les composantes RVB pour y appliquer des transformations, et qui devront donc être corrigés.

Précisons pour référence que visible_spectrum.py fonctionne parfaitement avec la version bêta 11.0.0. :bj:

Téléchargement : archives_voir.php?id=2102708

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 18 May 2019, 13:23
by UnCurieux
Merci pour la visibilité :)
Je précise également pour les personnes intéressé.e.s qu'une fois le spectre visible tracé, vous pouvez écrire la longueur d'onde en nanomètres ( nm ) même sans voir ce que vous écrivez, puis appuyez sur entrer pour voir la longueur d'onde correspondante. Longueur d'onde entre 400 et 700 nm.
Spectre visible longueur d'onde.png

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 18 May 2019, 14:01
by critor
Merci à toi pour la précision. :)

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 19 May 2019, 11:15
by critor
J'ai rajouté une phrase à ce sujet.

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 22 May 2019, 19:07
by parisse

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 06 Feb 2020, 10:55
by Smart Crystal
Dommage que ce script ne fonctionne plus sur la dernière version. :(
Un volontaire pour le modifier ?

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 06 Feb 2020, 16:38
by parisse
Voici une version KhiCAS Numworks de ce script:
https://workshop.numworks.com/python/parisseb/spectrum

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 06 Feb 2020, 20:46
by critor
@A2drien

Qu'est-ce qui ne marche plus ?

Il me semblait que le script était compatible avec le nouveau fonctionnement de la fonction color().

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 06 Feb 2020, 21:31
by Smart Crystal
critor wrote:Qu'est-ce qui ne marche plus ?

Il me semblait que le script était compatible avec le nouveau fonctionnement de la fonction color().

La fonction trace bien les couleurs, mais à la fin du tracé, ces couleurs disparaissent, et laissent place à ceci :

Image

Et si j'essaye de mettre un nombre après l :

Image
Image

Re: Toutes les couleurs du visible dans ta NumWorks

Unread postPosted: 06 Feb 2020, 21:56
by critor
Merci.

La disparition de la sortie graphique, c'est le nouveau comportement de la fonction input() qui est appelée juste après le tracé.
Code: Select all
from kandinsky import *
def spectrum():
  r,g,b=255,0,255
  for i in range(320):
    if i<54:
        r-=int(255/53)
    elif i>85 and i<102:
        g+=int(255/16)
    elif i>101 and i<123:
        b-=int(255/21)
    elif i>170 and i<194:
        r+=int(255/30)
    elif i>194 and i<235:
        g-=int(255/43)
        r=255
    elif i>233:
        g=0
    for j in range(100):
      set_pixel(i,j,color(r,g,b))
  m=0
  draw_string("nm",190,150)
  for n in range(10):
   l=input("l")
   for k in range(100,150):
     set_pixel(int(((int(m)-400)*320)/300),k,65535)
     set_pixel(int(((int(l)-400)*320)/300),k,0)
   draw_string(str(l),150,150)
   m=l


Et l'erreur, c'est parce que le code exécuté suite à ce input code la couleur sous forme d'entier et non sous forme de tuple.
Voici une correction optimisée par rapport à ce dernier point, mais je ne peux pas corriger le script numworks.com à la place de son propriétaire.
Code: Select all
from kandinsky import *
def spectrum():
  r,g,b=255,0,255
  for i in range(320):
    if i<54:
        r-=int(255/53)
    elif i>85 and i<102:
        g+=int(255/16)
    elif i>101 and i<123:
        b-=int(255/21)
    elif i>170 and i<194:
        r+=int(255/30)
    elif i>194 and i<235:
        g-=int(255/43)
        r=255
    elif i>233:
        g=0
    col=color(r,g,b)
    for j in range(100):
      set_pixel(i,j,col)
  m=0
  draw_string("nm",190,150)
  white=color(255,255,255)
  black=color(0,0,0)
  for n in range(10):
   l=input("l")
   for k in range(100,150):
     set_pixel(int(((int(m)-400)*320)/300),k,white)
     set_pixel(int(((int(l)-400)*320)/300),k,black)
   draw_string(str(l),150,150)
   m=l