Dans sa prochaine mise à jour gratuite désormais imminente pour
Graph 35+E II et
Graph 90+E,
Casio va rajouter de formidables
possibilités graphiques à son application
Python sous la forme de deux modules importables :
- matplotl (en fait un matplotlib.pyplot)
- turtle
Nous allons traiter aujourd'hui de la compatibilité du module
turtle, par rapport aux solutions concurrentes
(calculatrice NumWorks) et au
Python complet pour ordinateur.
Nous ne disposons certes pas d'une préversion de la mise à jour de
Casio. Toutefois, ce dernier a déjà diffusé et illustré plusieurs exemples qui permettent déjà de se faire une petite idée.
On commence par une petite rosace; tout possesseur de
Graph 35+E II sait que
Casio adore ça :
Casio | NumWorks | ordi |
| | |
- Code: Select all
from turtle import *
speed(0) for i in range(12): left(30) for i in range(8): forward(30) left(45)
|
Le code d'exemple fourni par
Casio passe ici sans problème sur
NumWorks et sur ordi.
On poursuit maintenant avec le flocon de
Koch :
Casio | NumWorks | ordi |
| | |
- Code: Select all
from turtle import *
def koch(n, l): if n==0: forward(l) else: koch(n-1, l/3) left(60) koch(n-1, l/3) right(120) koch(n-1, l/3) left(60) koch(n-1, l/3)
pencolor("blue") penup() goto(-180, -50) pendown() koch(4, 360)
|
Ici encore aucun problème, compatibilité totale !
Nous arrivons maintenant à un soleil. Mais ici hélas, le code de
Casio ne marche pas sur
NumWorks :
- Code: Select all
from math import exp
from turtle import *
for i in range(1,37):
red=(exp(-0.5 * ((i-6)/12)**2))
green=(exp(-0.5 * ((i-18)/12)**2))
blue=(exp(-0.5 * ((i-30)/12)**2))
pencolor([red, green, blue])
for i in range(1, 5):
forward(60)
right(90)
right(10)
Le problème semble ici être que la
Casio et la
NumWorks n'utilisent pas par défaut le même système de coordonnées pour les composantes couleurs en
turtle :
- nombre flottant de 0.0 à 1.0 sur Casio
- nombre entier de 0 à 255 sur NumWorks
Qui a raison ? Il semble que ce soit
Casio, l'ordinateur n'ayant aucun problème à exécuter ce code.
Notons que sur les implémentations
Python complètes on peut régler le comportement souhaité à l'aide des appels respectifs
turtle.colormode(1.0)
et
turtle.colormode(255)
.
Toutefois cette fonction n'est hélas pas incluse chez
NumWorks.
En conséquence, nous proposons le code corrigé ci-dessous, avec une fonction intermédiaire
mypencolor() qui corrigera les coordonnées si nécessaire, et qui à la différence marchera aussi sur
NumWorks :
Casio | NumWorks | ordi |
| | |
- Code: Select all
from math import exp from turtle import *
def mypencolor(t): cmax = 255 try: pencolor((2, 2, 2)) except: cmax = 1 if(cmax == 1 and max(t)>1): t = tuple(u/255 for u in t) elif(cmax == 255 and any(isinstance(u, float) for u in t)): t=tuple(int(255*u) for u in t) pencolor(t)
for i in range(1,37): red=(exp(-0.5 * ((i-6)/12)**2)) green=(exp(-0.5 * ((i-18)/12)**2)) blue=(exp(-0.5 * ((i-30)/12)**2)) mypencolor([red, green, blue])
for i in range(1, 5): forward(60) right(90) right(10)
|
Si tu trouves une façon plus simple de rajouter la compatibilité
NumWorks au code
Casio, n'hésite pas à nous la partager.
Enfin nous terminons avec une coquille d'escargot et malheureusement même problème, le code de
Casio marche partout sauf sur
NumWorks :
- Code: Select all
from turtle import *
from math import *
penup()
goto(0, -20)
pendown()
for i in range(1,37):
red=(exp(-0.5 * ((i-6)/12)**2))
green=(exp(-0.5 * ((i-18)/12)**2))
blue=(exp(-0.5 * ((i-30)/12)**2))
pencolor([red,green,blue])
circle(50-i)
right(10)
En conséquence, même correction en attendant mieux :
Casio | NumWorks | ordi |
| | |
- Code: Select all
from turtle import * from math import *
def mypencolor(t): cmax = 255 try: pencolor((2, 2, 2)) except: cmax = 1 if(cmax == 1 and max(t)>1): t = tuple(u/255 for u in t) elif(cmax == 255 and any(isinstance(u, float) for u in t)): t=tuple(int(255*u) for u in t) pencolor(t)
penup() goto(0, -20) pendown() for i in range(1,37): red=(exp(-0.5 * ((i-6)/12)**2)) green=(exp(-0.5 * ((i-18)/12)**2)) blue=(exp(-0.5 * ((i-30)/12)**2)) mypencolor([red,green,blue]) circle(50-i) right(10)
|