π
<-
Chat plein-écran
[^]

TI-z80 Elimination, immense RPG pour TI-83 Premium CE

New postby critor » 13 Apr 2022, 14:38

15445
Elimination
est un jeu de type
RPG
, une création originale par
Hot_Dog
initialement sortie en
novembre 2021
pour calculatriaces
TI-82 Plus
,
TI-83 Plus
et
TI-84 Plus
monochromes, prenant la forme d'une application.

Le
gameplay
est comparable à ce que tu as peut-être connu avec
Final Fantasy
,
Pokemon
,
Earthbound
ou encore
Super Mario RPG
. Tu enchaînes des phases d'exploration et de combat au tour par tour.

En 2050, les terriens sont en guerre avec une étrange race extraterreste insectiforme venue de la galaxie
Whirlpool
(tourbillon)
. Mais toute ressemblance avec d'autres histoires de science fiction s'arrête là, car les terriens avaient l'avantage.

Notre aventure démarre avec quatre enfants :
Ryan
,
Jamie
,
Collin
et
Megan
, qui par curiosité s'amusent à monter à bord d'une soucoupe volante écrasée. Malheureusement pendant qu'ils sont encore à bord, la soucoupe est récupérée et ramenée dans la galaxie
Whirlpool
. Bien évidemment, aucun d'eux ne sachant piloter une soucoupe volante alien, ce moyen de retour est a priori inenvisageable. Sauf qu'une autre race extraterrestre, les
Tosonians
et leur
leader
Jaslin
, sont prêts à aider nos quatre explorateurs à retrouver le chemin de la voie lactée.

C'est le début d'une formidable aventure sur calculatrices. Pour aider à la construction du vaisseau spatial
Tosonian
, ton équipe va devoir explorer des planètes, progresser en expérience et niveau, et accumuler des ressources
(or, cuivre, lithium, ...)
.

15446Aujourd'hui
Hot_Dog
nous fait l'immense plaisir d'une version couleur d'
Elimination
pour
TI-83 Premium CE
et
TI-84 Plus CE
! :bj:

11 niveaux t'attendent sur 8 planètes peuplées de plus de 70 ennemis dont des
boss
; mais qu'attends-tu ? ;)
Attention,
Elimination
rentre dans la catégorie des programmes en langage machine dits
ASM
.

Or, suite à un acte hautement maladroit d'un enseignant de Mathématiques français avec ses gesticulations certes compréhensibles mais aveugles dans le contexte de la réforme du lycée,
Texas Instruments
a réagi en supprimant la gestion de tels programmes depuis la mise à jour
5.5.1
.

Si tu es sur une des versions ainsi bridées, tu peux quand même jouer sans trop d'efforts. Il te faut :
  1. installer
    arTIfiCE
    pour remettre la possibilité de lancer des programmes
    ASM
  2. ensuite de préférence installer
    Cesium
    pour pouvoir lancer les programmes
    ASM
    plus facilement, ou même
    AsmHook
    pour pouvoir les lancer comme avant
  3. installer les bibliothèques
    C
    nécessaires au fonctionnement de certains jeux dont celui-ci
    (mais rien de compliqué, juste à transférer le fichier et c'est tout)

Téléchargements
:

Link to topic: Elimination, immense RPG pour TI-83 Premium CE (Comments: 0)

TI-Nspire KhiCAS: Python-turtle étendu pour NumWorks & Nspire CX

New postby critor » 12 Apr 2022, 19:37

15120Pour accompagner en douceur la transition du
Scratch
au
Python
en Seconde, la plupart des solutions
Python
sur calculatrices graphiques offrent
turtle
, une bibliothèque permettant du tracé relatif comme en
Scratch
. On peut citer :
  • la
    NumWorks
    dont l'application
    Python
    intègre directement
    turtle
  • les
    Casio Graph 35+E II
    et
    Graph 90+E
    dont l'application
    Python
    intègre directement
    turtle
  • les
    TI-Nspire CX II
    sur lesquelles on peut rajouter la bibliothèque officielle
    turtle
    (anciennement
    ce_turtl
    )
    à l'environnement
    Python
  • les
    TI-83 Premium CE Edition Python
    (France)
    ,
    TI-84 Plus CE-T Python Edition
    (Europe)
    et
    TI-84 Plus CE Python
    (Amérique du Nord)
    , sur lesquelles on peut rajouter une bibliothèque
    turtle
    officielle
  • et
    KhiCAS

11302Aujourd'hui justement approfondissons ce dernier point, parlons du
turtle
de
KhiCAS
. Conçu par
Bernard Parisse
, enseignant-chercheur à l'Université de Grenoble,
KhiCAS
est la déclinaison sur calculatrices du logiciel de Mathématiques intégré
Xcas
. Disponible pour calculatrices
NumWorks N0110
,
TI-Nspire CX
,
Casio Graph 35+E II
et
Graph 90+E
,
KhiCAS
te donne donc accès à une interface unifiée ainsi qu'à des fonctionnalités haut de gamme peu importe la marque ou le modèle de ta calculatrice ! :bj:

12024Ce formidable environnement de Mathématiques et de sciences t'apporte bien des choses. Nous pouvons citer dans tous les cas :
  • la reprise du moteur de calcul formel
    GIAC
    développé pour
    Xcas
    par le même auteur.
  • la possibilité de programmer dans 2 langages :
    • le langage
      Xcas
      historique
    • le langage
      Xcas
      avec une couche de compatibilité syntaxique
      Python

Dans ses éditions pour
TI-Nspire CX
et
NumWorks N0110
,
KhiCAS
apporte pas mal de compléments :
  • possibilité de composer et convertir ses unités
  • une bibliothèque de constantes physiques
  • plusieurs applications elles-même intégrées, dont entre autres :
    • tableur / feuille de calcul
    • tableau périodique des éléments
    • calcul financier
  • 2 langages de programmation supplémentaires :
    • Python
      via un interpréteur
      Micropython
    • Javascript
      via un interpréteur
      QuickJS

L'environnement
Python
sur ces modèles est extrêmement riche, bien davantage que les solutions
Python
intégrées par les constructeurs. On peut citer nombre de bibliothèques :
  • cas
    et
    xcas
    pour appeler le moteur de calcul formel
    GIAC
    directement depuis tes scripts
    Python
  • cmath
    pour traiter directement tes calculs sur les nombres complexes en
    Python
  • linalg
    pour l'algèbre linéaire
  • arit
    pour l'arithmétique
  • ulab.scipy
    pour le calcul scientifique
  • ulab.numpy
    pour le calcul matriciel et vectoriel
  • plusieurs bibliothèque de tracés :
    • turtle
      pour les tracés relatifs à la
      Scratch
    • matplotlib
      pour les tracés dans un repère
    • graphic
      pour les tracés par pixels, accompagnée de
      casioplot
      pour la compatibilité avec les scripts graphiques
      Casio
      et
      kandinsky
      pour la compatibilité avec les scripts graphiques
      NumWorks
  • et bien d'autres :
    gc
    ,
    math
    ,
    micropython
    ,
    nsp
    ,
    pylab
    ,
    random
    ,
    sys
    ,
    time
    ,
    ubinascii
    ,
    ucollections
    ,
    uctypes
    ,
    uerrno
    ,
    uhashlib
    ,
    uheapq
    ,
    uio
    ,
    ujson
    ,
    ure
    ,
    ustruct
    ,
    uzlib

La dernière mise à jour de
KhiCAS
améliore justement les possibilités de la bibliothèque
turtle
. Elle est disponible à ce jour :
  • uniquement en version
    alpha
    pour
    TI-Nspire CX
  • en version stable pour
    NumWorks N0110
Découvrons ensemble les nouveautés.








A) Contenu bibliothèque

Go to top

Commençons donc par explorer le contenu de la bibliothèque
turtle
:
Code: Select all
import turtle
l = dir(turtle)
l
len(l)


Effectivement il y a bien des nouveauté, nous passons de 66 à 69 éléments. Nous disposons de 3 nouvelles méthodes :
  • .clear() pour effacer l'affichage sans réinitialiser la position de la tortue
  • .pos(), un alias court de .position() que l'on avait déjà pour récupérer la position de la tortue
  • .towards(x, y) pour obtenir l'angle d'orientation permettant d'atteindre les coordonnées fournies

Cela peut certes te paraître peu, bien que
.towards()
permette déjà d'aborder facilement des scripts bien plus ambitieux comme nous verrons plus bas.

Mais ça c'est juste pour les méthodes rajoutées ; il va rester à voir si il y a eu des améliorations sur le fonctionnement des méthodes déjà présentes.




B) Tests de conformité comparatifs
(toutes solutions turtle)

Go to top

Tentons pour le moment un autodiagnostic plus général des différences entres les ancienne et nouvelle bibliothèques
turtle
de
KhiCAS
, c'est-à-dire la vérification de tout ce qui peut différer du standard.

Voici des scripts en ce sens, une amélioration majeure de ceux développés dans le code de notre test de rentrée
QCC 2021
:
Code: Select all
_turtle_errors = 0

def _turtle_error(k):
  global _turtle_errors
  _turtle_errors |= 1 << k

# import turtle
try:
  import turtle
  if not "forward" in dir(turtle):
    turtle = turtle.Turtle()
except ImportError: #TI-83 Premium CE
  from ce_turtl import turtle
  _turtle_error(0)
try:
  turtle.clear()
except:
  turtle.reset()

# can turtle be patched ?
_fix_turtle = True
try:
  def _fixcolor(c): return c
  turtle._fixcolor = _fixcolor
except:
  _fix_turtle = False

# test color() + pencolor() + fillcolor()
if not "pencolor" in dir(turtle):
  pencolor = turtle.color
  _turtle_error(1)
else:
  pencolor = turtle.pencolor
if not "color" in dir(turtle):
  _turtle_error(2)
if not "fillcolor" in dir(turtle):
  _turtle_error(12)

if not "clear" in dir(turtle):
  _turtle_error(13)
if not "reset" in dir(turtle):
  _turtle_error(14)
if not "heading" in dir(turtle):
  _turtle_error(11)

# test color argument types
_color_types = 0
try:
  pencolor([0, 0, 0])
  _color_types |= 1 << 0
except: _turtle_error(4)
try:
  pencolor((0, 0, 0))
  _color_types |= 1 << 1
except: _turtle_error(5)
try:
  pencolor(0, 0, 0)
  _color_types |= 1 << 2
except: _turtle_error(6)
try:
  pencolor("black")
  _color_types |= 1 << 3
except: _turtle_error(7)

# test colormode()
if not "colormode" in dir(turtle):
  _turtle_error(3)

# test color strings
_colors_fix={
  "blue":(0,0,1),
  "green":(0,1,0),
  "red":(1,0,0),
  "cyan":(0,1,1),
  "yellow":(1,1,0),
  "magenta":(1,0,1),
  "white":(1,1,1),
  "orange":(1,0.65,0),
  "purple":(0.66,0,0.66),
  "brown":(0.75,0.25,0.25),
  "pink":(1,0.75,0.8),
  "grey":(0.66,0.66,0.66),
  "black":(0,0,0),
}
for c in tuple(_colors_fix.keys()):
  try:
    pencolor(c)
    _colors_fix.pop(c)
  except: pass
if len(_colors_fix):
  if _color_types & 1 << 3:
    _turtle_error(8)

# test circle(,)
try: turtle.circle(0,0)
except:
  _turtle_error(9)

#test towards
try: turtle.towards
except:
  _turtle_error(15)

# test for unfixable missing functions
_missing_fct=["write","pensize","dot"]
for f in tuple(_missing_fct):
  try:
    eval("turtle."+f)
    _missing_fct.remove(f)
  except: pass
if len(_missing_fct):
    _turtle_error(16)

_missing_alias=[
  ["backward","back","bk"],
  ["forward","fd"],
  ["right","rt"],
  ["left","lt"],
  ["position","pos"],
  ["goto","setpos","setposition"],
  ["setheading","seth"],
  ["pendown","pd","down"],
  ["penup","pu","up"],
  ["pensize","width"],
  ["showturtle","st"],
  ["hideturtle","ht"],
]
for aliases in tuple(_missing_alias):
  validf = None
  for f in tuple(aliases):
    try:
      eval("turtle."+f)
      validf = f
      aliases.remove(f)
      break
    except: pass
  for f in tuple(aliases):
    try:
      eval("turtle."+f)
      aliases.remove(f)
    except: pass
  if not len(aliases):
    _missing_alias.remove(aliases)
  else:
    aliases.insert(0, validf)
if len(_missing_alias):
    _turtle_error(17)

try:
  turtle.position()
except:
  try:
    turtle.pos()
  except:
    _turtle_error(10)
Code: Select all
from ttl_chk import *
from ttl_chk import _fix_turtle, _turtle_errors, _colors_fix, _missing_fct, _missing_alias

def turtle_diags():
  print("Type: " + str(type(turtle)))
  print("Patchable: " + (_fix_turtle and "yes" or "no"))
  errors_msg = (
    "No <import turtle>",
    "No pencolor()",
    "No color()",
    "No colormode()",
    "No color as list",
    "No color as tuple",
    "No color as args",
    "No color as string",
    "Missing colors strings: ",
    "No circle(,angle)",
    "Can't get position()",
    "No heading()",
    "No fill",
    "No clear()",
    "No reset()",
    "No towards()",
    "Other missing: ",
    "Missing aliases: ",
  )
  errors = 0
  for k in range(len(errors_msg)):
    if _turtle_errors & 1 << k:
      errors += 1
      msg = "Err " + str(k) + ": " + errors_msg[k]
      if k == 8:
        msg += str(len(_colors_fix)) + " " + str(tuple(_colors_fix.keys()))
      if k == 16:
        msg += str(len(_missing_fct)) + " " + " ".join(_missing_fct)
      if k == 17:
        l = []
        for v in _missing_alias:
          l.extend(v[1:])
        msg += str(len(l)) + " " + " ".join(l)
      print(msg)
  print(str(errors) + " error" + ((errors > 1) and "s" or ""))

turtle_diags()


Voici ce que nous racontent les scripts sur les différentes solutions
turtle
:

TI-83PCE/84+CE
turtle


TI-Nspire CX II
turtle

Casio
Graph 90E


nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl


NumWorks

Casio
Graph 35+E II


ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


On confirme donc avec la nouvelle version
KhiCAS
l'ajout des 3 méthodes jusqu'alors manquantes.

Mais surtout il n'y a donc dans l'état actuel des scripts plus aucune erreur détectée automatiquement, chose exceptionnelle si l'on compare aux solutions officielles, et signe d'un soin minutieux !

Mais ça, c'est pour les problèmes détectables par des vérifications automatisées. Voyons maintenant d'éventuels écarts visuels sur quelques exemples de scripts.

Afin de pouvoir comparer équitablement avec les solutions officielles visiblement parfois bien moins conformes au standard
turtle
tout en conservant une unique version de chaque script utilisable sur l'ensemble des solutions, voici un script qu'il suffira d'importer à la place de chaque bibliothèque
turtle
et qui, lorsque celle-ci sera modifiable, corrigera la plupart des erreurs détectées : :bj:
Code: Select all
from ttl_chk import *
from ttl_chk import _color_types, _turtle_errors, _colors_fix, _missing_fct, _missing_alias

_fix_turtle = True

def nop(*argv): return None
idty = lambda c: c

try: # can turtle be patched ?
  turtle._fixcolorlist = idty
  turtle._fixcolorval = idty
  turtle._fixcolorstring = idty
  turtle._fixcolorargs = idty
  turtle._fixcolor = lambda c: turtle._fixcolorlist(turtle._fixcolorval(turtle._fixcolorstring(turtle._fixcolorargs(c))))
except:
  _fix_turtle = False

if _fix_turtle:

  # fix color() + pencolor()
  if _turtle_errors & 0x1000:
    turtle.fillcolor, turtle.begin_fill, turtle.end_fill = idty, nop, nop
  if _turtle_errors & 2:
    def _pencolor_(*argv):
      if len(argv): turtle.color(argv)
      else: return turtle.color()[0]
    turtle.pencolor = _pencolor_
  if _turtle_errors & 4:
    def _color_(*argv):
      if len(argv) == 2:
        turtle.pencolor(argv[0])
        turtle.fillcolor(argv[1])
      elif len(argv):
        turtle.pencolor(argv)
      else:
        return (turtle.pencolor(), turtle.fillcolor())
    turtle.color = _color_

  _fix_color = _color_types & 0b11 != 0b11 or not "colormode" in dir(turtle)

  # fix list/tuple color argument
  if _color_types & 0b11 == 0b10:
    def _fixcolorlist(c): return type(c) is list and tuple(c) or c
    turtle._fixcolorlist = _fixcolorlist
  if _color_types & 0b11 == 0b01:
    def _fixcolorlist(c): return type(c) is list and list(c) or c
    turtle._fixcolorlist = _fixcolorlist
  if not _color_types & 4:
    def _fixcolorargs(*argv):
      return len(argv) != 1 and argv or argv[0]

  if _fix_color:
    turtle._color = turtle.color
    turtle._pencolor = turtle.pencolor
    turtle._fillcolor = turtle.fillcolor
    if _color_types & 0b11:
      def _color(*argv):
        n = len(argv)
        if not(n): return turtle._color()
        elif n==2: turtle._color(argv[0], argv[1])
        else: turtle._color(n > 1 and argv or argv[0])
      def _pencolor(*argv):
        if not(len(argv)): return turtle._pencolor()
        turtle._pencolor(turtle._fixcolor(len(argv) > 1 and argv or argv[0]))
      def _fillcolor(*argv):
        if not(len(argv)): return turtle._fillcolor()
        turtle._fillcolor(turtle._fixcolor(len(argv) > 1 and argv or argv[0]))
    else:
      def _color(*argv):
        n = len(argv)
        if not(n): return turtle._color()
        c = turtle._fixcolor(n == 3 and argv or argv[0])
        turtle._color(c[0], c[1], c[2])
      def _pencolor(*argv):
        if not(len(argv)): return turtle._pencolor()
        c = turtle._fixcolor(len(argv)>1 and argv or argv[0])
        turtle._pencolor(c[0], c[1], c[2])
      def _fillcolor(*argv):
        if not(len(argv)): return turtle._fillcolor()
        c = turtle._fixcolor(len(argv)>1 and argv or argv[0])
        turtle._fillcolor(c[0], c[1], c[2])
    turtle.color = _color
    turtle.pencolor = _pencolor
    turtle.fillcolor = _fillcolor

  # fix colormode()
  if _turtle_errors & 8:
    # test color mode
    try:
      turtle.pencolor([255, 0, 0])
      _color_mode = 255
    except: _color_mode = 1.0
    turtle._color_mode = _color_mode
    def _colormode(*argv):
      if not(len(argv)): return turtle._color_mode
      if int(argv[0]) in (1, 255):
        turtle._color_mode = int(argv[0]) == 255 and 255 or 1.0
    turtle.colormode = _colormode
    if _color_mode == 255:
      turtle._fixcolorval = lambda c: int(turtle._color_mode) == 1 and type(c) in (list, tuple) and [int(c[k] * 255) for k in range(3)] or c
    else:
      turtle._fixcolorval = lambda c: turtle._color_mode == 255 and type(c) in (list, tuple) and [c[k] / 255 for k in range(3)] or c

  # fix color strings
  if len(_colors_fix):
    def _fixcolorstring(c):
      if type(c) is str and c in _colors_fix:
        c = _colors_fix[c]
        if turtle.colormode() == 255:
          c = [int(c[k] * 255) for k in range(3)]
      return c
    turtle._fixcolorstring = _fixcolorstring

  # fix circle(,)
  if _turtle_errors & 0x200:
    turtle._circle = turtle.circle
    def _circle(r, a=360): turtle._circle(r)
    turtle.circle = _circle

  if len(_missing_fct):
    for f in _missing_fct:
      exec("turtle."+f+"=nop")

  if len(_missing_alias):
    for aliases in _missing_alias:
      validf = aliases[0]
      for f in aliases[1:]:
        exec(validf and "turtle."+f+"=turtle."+validf or "turtle."+f+"=nop")

  # fix clear()
  if _turtle_errors & 0x2000:
    turtle.clear = turtle.reset

  # fix reset()
  if _turtle_errors & 0x4000:
    turtle.reset = turtle.clear

  # fix towards()
  if _turtle_errors & 0x8000:
    from math import atan2, pi
    def _towards(x, y):
      x0, y0 = turtle.pos()
      return atan2(y - y0, x - x0) * 180 / pi
    turtle.towards = _towards




C) 17 exemples comparatifs
(toutes solutions turtle)

Go to top

Maintenant que nous avons de quoi faire tourner une unique version de chaque script sur l'ensemble des machines, poursuivons donc l'exploration de l'ensemble des solutions
turtle
avec quelques exemples de script.

Nous allons en profiter pour nous en donner à cœur joie avec les formidables fonctions de remplissage rajoutées dans l'avant-dernière version de
KhiCAS
, sur le thème de .

C'est donc l'occasion de voir si il y avait d'autres problèmes qui n'ont pas pu être détectés automatiquement, et si ils sont toujours présents dans la dernière version.

Plusieurs des exemples qui vont suivre sont inspirés de publications de pour
TI-Nspire CX II
et très librement et fortement adaptés pour être fonctionnels dans le contexte du
heap
Python
bien plus restreint des
TI-83 Premium CE
et compatibles.


Exemple n°1 : La dalle aux ammonites

Go to top

C'est donc parti pour quelques exemples afin d'approfondir les améliorations de la nouvelle bibliothèque
turtle
pour
TI-83 Premium CE Edition Python
et compatibles, ainsi que les points forts et faibles par rapport aux autres modèles de calculatrices.

Précisons que les problèmes récurrents ne seront pas systématiquement réévoqués sur chaque exemple.

Un petit peu au Nord de Digne-les-bains en rive droite de la Bléone se trouve la dalle aux ammonites. Comme il est strictement interdit d'en prélever, voici de quoi en reproduire une sur ta calculatrice :
Code: Select all
from ttl_fix import *
from math import pi

turtle.speed(0)
turtle.pencolor((0,0,0))
turtle.pendown()
turtle.pensize(1)

turtle.goto(0,-8)
x,y = turtle.pos()
turtle.left(115)
for i in range(132):
  turtle.forward(10)
  try:
    h = turtle.towards(x,y)
    turtle.setheading(h)
  except: pass
  d=10*pi
  turtle.forward(d)
  turtle.backward(d)
  turtle.right(90)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


KhiCAS
ainsi que le
turtle
officiel de la
NumWorks
avaient un tracé incorrect ici, car la méthode
.towards()
était absente de leur implémentation de
turtle
. Et malheureusement, la bibliothèque
turtle
n'est dans ces deux cas pas altérable à l'exécution ce qui empêchait notre script de corriger.

Concernant
KhiCAS
ce manque est maintenant comblé, et visiblement parfaitement fonctionnel !

Exemple n°2 : Le défilé automobile

Go to top

Nous t'emmenons maintenant au défilé avec les logos de plusieurs grands constructeurs... automobiles :
Code: Select all
from ttl_fix import *

def rpoly(c, n):
  for k in range(n):
    turtle.forward(c)
    turtle.left(360 / n)

def audi(r):
  ir = 2 * r // 13
  turtle.penup()
  turtle.left(90)
  turtle.forward(r//2 - 2*ir)
  turtle.right(90)
  turtle.forward(-ir)
  turtle.pendown()
  turtle.pensize(3)
  for i in range(4):
    turtle.penup()
    turtle.forward(3 * ir)
    turtle.pendown()
    turtle.circle(2 * ir)

def mercedez_benz(r):
  ir = r // 2
  turtle.penup()
  turtle.forward(ir)
  turtle.left(90)
  turtle.forward(ir)
  turtle.pendown()
  turtle.pensize(2)
  x, y = turtle.pos()
  turtle.setheading(210)
  for i in range(3):
    turtle.goto(x,y)
    turtle.forward(ir)
    turtle.left(120)
  turtle.setheading(0)
  turtle.circle(-ir)

def citroen(r):
  x,y=turtle.pos()
  turtle.setheading(0)
  turtle.color((255,0,0), (255,0,0))
  turtle.begin_fill()
  rpoly(r, 4)
  turtle.end_fill()
  turtle.fillcolor((255,255,255))
  for i in range(2):
    turtle.setheading(45)
    turtle.begin_fill()
    for k in range(2):
      turtle.forward(.71 * r)
      turtle.left(k and 172 or -90)
    for k in range(2):
      turtle.forward(5 * r / 6)
      turtle.left(106)
    turtle.end_fill()
    y += r / 3
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()

def mitsubichi(r):
  ir = r // 3
  turtle.penup()
  turtle.left(90)
  turtle.forward(ir)
  turtle.right(90)
  turtle.forward(r // 2)
  turtle.pendown()
  for i in range(3):
    turtle.setheading(60 + 120*i)
    turtle.color((255,0,0), (255,0,0))
    turtle.begin_fill()
    for k in range(4):
      turtle.forward(ir)
      turtle.left((k%2) and 120 or 60)
    turtle.end_fill()

def jeep(r):
  a=54
  ir = r/0.47552825814758/4 #sin(radians(a))/cos(radians(a))
  a=ir/0.85
  d=0.93*ir
  turtle.penup()
  turtle.forward(r//2)
  turtle.right(90)
  turtle.forward(ir - r)
  turtle.pendown()
  x, y = turtle.pos()
  turtle.setheading(234)
  turtle.forward(ir)
  turtle.left(126)
  turtle.fillcolor((180,180,180))
  turtle.begin_fill()
  rpoly(a, 5)
  turtle.end_fill()
  for i in range(5):
    col = i < 3 and (0,0,0) or (255,255,255)
    for j in range(2):
      turn =  j and turtle.left or turtle.right
      turtle.goto(x,y)
      turtle.setheading(90 + 72*i)
      turtle.fillcolor(col)
      turtle.begin_fill()
      turtle.forward(d)
      turn(172)
      turtle.forward(0.85*d)
      turn(44)
      turtle.forward(0.2*d)
      turtle.end_fill()
      col = [255 - col[k] for k in range(3)]

turtle.speed(0)
turtle.colormode(255)

r = 92
for iy in range(2):
  for ix in range(3):
    i = iy*3+ix
    if i < 5:
      y, x = (2*iy - 1) * r//2 - 48, (ix - 1)*r - 50
      turtle.penup()
      turtle.goto(x, y)
      turtle.setheading(0)
      turtle.pensize(1)
      turtle.pencolor((0,0,0))
      turtle.pendown()
      (mercedez_benz,jeep,mitsubichi,citroen,audi)[i](r)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Sur cet exemple,
KhiCAS
reste l'une des solutions
turtle
qui s'en tire hélas le moins bien.

Toutefois on peut remarquer une petite amélioration depuis la dernière fois ; la couleur de remplissage passé en 2ème paramètre de la méthode .color(,) n'est plus ignorée et est maintenant gérée correctement.

Exemple n°3 : L'escargot de lumière

Go to top

Si tu es dans le Sud de la France tu sais qu'il ne pleut pas souvent
(par contre, quand il pleut... il pleut !)
. Alors voici pour toi un escargot bariolé :
Code: Select all
from math import exp
from ttl_fix import *

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(1.0)

turtle.penup()
turtle.goto(0, -20)
turtle.pendown()
turtle.right(90)
for i in range(20):
  c = [exp(-.5 * ((i - k) / 12)**2) for k in (6, 18, 30)]
  cb = [v/2 for v in c]
  turtle.color(cb, c)
  try: turtle.begin_fill()
  except: pass
  turtle.circle(27 + i)
  try: turtle.end_fill()
  except: pass
  turtle.right(10)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ici pour la même raison,
KhiCAS
se range maintenant avec les meilleures solutions
turtle
!

Exemple n°4 : Les flocons de Koch

Go to top

Encore une fois si tu es dans le Sud de la France, tu n'a pas dû voir de neige depuis des années... Faison donc neiger dans ta calculatrice maintenant, faisons neiger des
flocons de Koch
:
Code: Select all
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def koch(n, l):
  if n<=0:
    turtle.forward(l)
  else:
    koch(n - 1, l / 3)
    turtle.left(60)
    koch(n - 1, l / 3)
    turtle.right(120)
    koch(n - 1, l / 3)
    turtle.left(60)
    koch(n - 1, l / 3)

def flock(n, l):
  koch(n, l)
  turtle.right(120)
  koch(n, l)
  turtle.right(120)
  koch(n, l)

turtle.speed(0)
turtle.colormode(255)

c = [127, 255, 0]
l = 80
for j in range(2):
  for i in range(3):
    n = j and 3 + i or 2 - i
    s = 5 - n
    turtle.penup()
    turtle.goto(i*117-157, j*95-25)
    turtle.pencolor(tuple(c))
    turtle.pensize(s)
    turtle.setheading(0)
    turtle.pendown()
    flock(n, l)
    n += 1
    rotate_list(c)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Ici par contre, toujours le problème de mauvaise couleur pour le dernier flocon tracé avec
KhiCAS
.

Mais cela reste malgré tout mieux que d'autres solutions officielles.

Exemple n°5 : La linea

Go to top

Code: Select all
try: #TI-83 Premium CE
  from ti_system import disp_clr
  disp_clr()
except: pass
from ttl_fix import *

def spiral(k,a,l):
  x0, y0 = turtle.pos()
  h0 = turtle.heading()
  while True:
    for s in l:
      turtle.forward(s*k)
      turtle.left(180-a)
    x, y = turtle.pos()
    if abs(x - x0) + abs(y - y0) + abs(turtle.heading() - h0) <= 1:
      break

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)
turtle.color((0,0,0),(255,255,0))

try:
  for i in range(-1, 2, 2):
    turtle.penup()
    turtle.goto(80*i - ((i > 0) and 40 or 50), 0)
    turtle.pendown()
    try: turtle.begin_fill()
    except: pass
    spiral((i > 0) and 9 or 30, (i > 0) and 90 or 36, (i > 0) and (1,2,3,4,5,6,7,8,9) or (1,2,3))
    try: turtle.end_fill()
    except: pass
except MemoryError as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Certes cette fois-ci
KhiCAS
remplit la forme de gauche de la bonne couleur, mais ne remplit bizarrement plus correctement celle de droite...

Exemple n°6 : Pavage d'une lagogne

Go to top

Partons maintenant à la pêche avec un script très hautement impressionnant par rapport aux contraintes de
heap
des
TI-83 Premium CE
et compatibles ; ici nous sommes vraiment sur le fil de la limite des possibilités concernant ces modèles.

Voici donc une lagogne littéralement pavée de poissons :
Code: Select all
from math import sqrt
from ttl_fix import *

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)
turtle.pencolor((0,0,0))

a=16

try:
  j = 0
  while -5 < j < 4:
    col = ((0,0,255),(255,0,0),(255,180,0))[j%3]
    i = 0
    while -2 + (j % 2) < i < 2:
      for c in range(3):
        turtle.penup()
        turtle.goto(sqrt(3)*3*a*(i*2-(j%2)), 3*a*j)
        turtle.setheading(-30 + 120*c)
        turtle.pendown()
        turtle.fillcolor(col)
        turtle.begin_fill()
        for k in range(-17, 18):
          l = a*sqrt(7)
          tf = ((1,141.787), (0,l), (1,-100.893), (0,a), (1,120), (0,a/2), [1,-120], [0,-a], [0,a], [1,120], (0,a/2), (1,60), (0,a), (1,-120), (0,a), (1,100.893), (0,l), [1,-40.893])[abs(k)]
          if k==6 or k==9 or k==17: tf[1] -= 180
          elif k==7 or k==8: tf[1] *= -1
          (turtle.forward, turtle.left)[tf[0]](tf[1])
        turtle.end_fill()
        turtle.forward(6*a)
        turtle.backward(5*a)
        turtle.penup()
        turtle.right(90)
        l = a*sqrt(3)/6
        for k in range(2):
          turtle.forward(l)
          turtle.pencolor((255,255,255))
          turtle.dot(a//4)
          turtle.pencolor((0,0,0))
          turtle.dot(a//8)
          turtle.backward(l)
          turtle.left(180)
      i = -i + (i <= 0)
    j = -j - (j >= 0)
except Exception as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Malheureusement pas d'amélioration ici, les poissons continuent à ne pas se comporter correctement sous
KhiCAS
.

Exemple n°7 : Le triangle de Penrose

Go to top

Tu n'as jamais touché à un triangle de
Penrose
? Et bien voici de quoi en afficher le plan dans ta calculatrice, tu n'auras plus qu'à l'imprimer en 3D, si tu arrives à comprendre où est le devant et l'arrière : ;)
Code: Select all
from math import sqrt
from ttl_fix import *

def hook(a, c):
  turtle.penup()
  turtle.goto(0,-15)
  turtle.setheading(a)
  turtle.forward((l - 4*b) / sqrt(3))
  turtle.right(150)
  turtle.pendown()
  lf = ((turtle.left, 60),[turtle.forward,b],(turtle.left,120),(turtle.forward,l-b),[turtle.right,120],[turtle.forward,l-3*b])
  try:
    turtle.fillcolor(c)
    turtle.begin_fill()
  except: pass
  for k in range(-len(lf) + 1, len(lf)):
    tf = lf[abs(k)]
    if k == 1: tf[1] = l
    elif k == 4: tf[0] = turtle.left
    elif k == 5: tf[1] = b
    tf[0](tf[1])
  try: turtle.end_fill()
  except: pass
 
turtle.speed(0)
turtle.pensize(2)
turtle.colormode(255)

l=180
b=23

for i in range(112):
  turtle.pencolor(232 - int(i * 23 / 11), 249 - int(i * 29 / 55), 255)
  turtle.penup()
  turtle.goto(-192, 111 - 2*i)
  turtle.pendown()
  turtle.forward(384)

turtle.pencolor((0,0,0))
turtle.pensize(1)

hook(330, (255,255,0))
hook(90, (0,0,255))
hook(210, (255,0,0))

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°8 : La courtepointe de Mamie

Go to top

Voici maintenant la courtepointe brodée avec amour et soin par Mamie :
Code: Select all
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def poly_reg_a(l, a):
  h0 = turtle.heading()
  while True:
    turtle.forward(l)
    turtle.left(a)
    if abs(h0 - turtle.heading()) < .1:
      break

turtle.hideturtle()
turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)

c = [191, 127, 0]
cf = [127, 255, 0]
i = 0
while i > -3:
  j = 0
  while j > -2:
    turtle.penup()
    turtle.goto((i - 1)*88, (j - 1)*85 + 28)
    turtle.pendown()
    turtle.color(c, cf)
    try: turtle.begin_fill()
    except: pass
    poly_reg_a(80, 140)
    try: turtle.end_fill()
    except: pass
    rotate_list(c)
    rotate_list(cf)
    j = -j + (j <= 0)
  i = -i + (i <= 0)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


C'est bon ici,
KhiCAS
choisit enfin des fils de la bonne couleur pour broder la courtepointe !

Exemple n°9 : Les vitraux rhombiques

Go to top

Voici maintenant une belle rosace rhombique pour décorer le bâtiment de ton choix.

Nous utilisons ici la méthode
.dot()
permettant de remplir un disque de diamètre donné, afin de générer de quoi avoir une couleur de fond d'écran sur nos calculatrices, suffit-il juste de lui spécifier un diamètre suffisamment grand :
Code: Select all
from ttl_fix import *

turtle.speed(0)
turtle.colormode(255)
turtle.pencolor((0,0,255))
turtle.dot(320)
turtle.pencolor((0,0,0))
turtle.pensize(2)
col = ((255,0,0),(255,255,0),(0,255,0),(255,255,255),(255,0,255))
a=60

for i in range(10):
  c = col[i%5]
  turtle.color(c, c)
  turtle.begin_fill()
  for j in range(5):
    turtle.forward(a)
    turtle.right(72)
  turtle.end_fill()
  turtle.right(36)

for i in range(10):
  c = [v//3 for v in col[i%5]]
  turtle.pencolor(c)
  for j in range(5):
    turtle.forward(a)
    turtle.right(72)
  turtle.right(36)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Bonne nouvelle ici encore,
KhiCAS
nous peint enfin les vitraux de la bonne couleur ! :bj:

Par rapport au fond bleu, notons que c'est cette nouvelle version de
KhiCAS
qui adopte le comportement correct. Selon le standard
turtle
, la méthode
.dot()
attend en paramètre le diamètre du disque à tracer. Ce sont les modèles
Texas Instruments
qui le considèrent à tort comme un rayon et remplissent alors tout l'écran.

Exemple n°10 : Les roses par 12

Go to top

Voici maintenant une rose, cette fois-ci sur un fond d'écran en dégradé radial. Nous utiliserons pour cela cette fois-ci une boucle de
.dot()
:
Code: Select all
from math import pi, sin, cos, sqrt
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)
def carre(c): rpoly(c, 4)

turtle.speed(0)
turtle.colormode(255)
turtle.penup()

r=80
alpha=(15 * pi / 180)

for i in range(320):
  c=int(255/320*i)
  turtle.pencolor(c,c,c)
  try: turtle.dot(320-i)
  except: pass

turtle.goto(20,-76)
turtle.color((255,255,255),(0,0,0))

for i in range(4):
  a=r*sin(alpha)*2
  d=a/sqrt(2)
  turtle.pendown()
  for i in range(12):
    turtle.right(15)
    try: turtle.begin_fill()
    except: pass
    carre(d)
    try: turtle.end_fill()
    except: pass
    turtle.left(45)
    turtle.penup()
    turtle.forward(a)
    turtle.pendown()
  turtle.penup()
  turtle.left(75)
  turtle.forward(d)
  turtle.right(60)
  r=r*cos(alpha)-a/2

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


KhiCAS
nous colorie enfin les pétales correctement !

Et sur la taille du disque de fond d'écran, c'est
KhiCAS
qui fait comme il faut.

Exemple n°11 : Les triangles de Sierpiński

Go to top

Revenons aux fractales et à la récursivité avec les
triangles de Sierpiński
. As-tu déjà réussi à les compter ? Et bien voici de quoi commencer sur ta calculatrice :
Code: Select all
from ttl_fix import *

def sierp(n, l):
  if n == 0:
    for i in range (0, 3):
      turtle.forward(l)
      turtle.left(120)
  if n > 0:
    sierp(n - 1, l / 2)
    turtle.forward(l / 2)
    sierp(n - 1, l / 2)
    turtle.backward(l / 2)
    turtle.left(60)
    turtle.forward(l / 2)
    turtle.right(60)
    sierp(n - 1, l / 2)
    turtle.left(60)
    turtle.backward(l / 2)
    turtle.right(60)

turtle.colormode(255)
turtle.speed(0)
turtle.pensize(1)

turtle.penup()
turtle.goto(-110, -95)
turtle.pendown()
turtle.pencolor((255,0,0))
sierp(6, 220)
turtle.penup()
turtle.forward(400)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°12 : Sous le soleil exactement

Go to top

Plaçons-nous maintenant
sous le soleil exactement
, profitant ainsi de toutes les couleurs de la lumière blanche :
Code: Select all
from math import exp
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)
def carre(c): rpoly(c, 4)

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(1.0)

n = 36
for i in range(n):
  k=.4 + 4*i/255
  cp = [.7*exp(-.5 * ((n - i - k) / (n / 3))**2) for k in (6, 18, 30)]
  turtle.pencolor(cp)
  try:
    turtle.fillcolor((k,k,0))
    turtle.begin_fill()
  except: pass
  carre(60)
  try: turtle.end_fill()
  except: pass
  turtle.right(360 / n)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Du changement ici encore sur
KhiCAS
, notre soleil émet maintenant dans les bonnes longueurs d'onde !

Exemple n°13 : Le labyrinthe du Minotaure

Go to top

Explorons maintenant dans la labyrinthe du Minotaure :
Code: Select all
from ttl_fix import *

turtle.speed(0)
turtle.colormode(255)
turtle.pendown()

turtle.right(48)
turtle.pencolor((0,0,0))
for i in range(98):
  turtle.forward(2*i)
  turtle.left(90.5)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ah c'est bon cette fois-ci, le labyrinthe se construit maintenant correctement sur
KhiCAS
Dédale et Minos seront contents. ;)

Exemple n°14 : Le carreau de carreaux

Go to top

Code: Select all
from math import sqrt
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def reg_poly(l, n):
  for i in range(n):
    turtle.forward(l)
    turtle.left(360/n)

def square(l):
  reg_poly(l, 4)

turtle.colormode(255)
turtle.pencolor(0,0,0)
turtle.speed(0)

turtle.pensize(3)
d=190
c=[0,255,127]
turtle.penup()
turtle.goto(-d/2,-d/2)
turtle.setheading(0)
turtle.pendown()
for i in range(8):
  try:
    turtle.fillcolor(tuple(c))
    turtle.begin_fill()
  except: pass
  square(d)
  try:
    turtle.end_fill()
  except: pass
  turtle.penup()
  turtle.forward(d/2)
  turtle.left(45)
  turtle.pendown()
  d/=sqrt(2)
  rotate_list(c)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°15 : Les étoiles jumelles

Go to top

Code: Select all
try: # TI-83 Premium CE
  from ti_system import disp_clr
  disp_clr()
except: pass
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)

def rosace(c, n1, a, n2):
  try: turtle.begin_fill()
  except: pass
  for i in range(n2):
    turtle.left(a)
    rpoly(c, n1)
  try: turtle.end_fill()
  except: pass

turtle.colormode(255)
turtle.pencolor((0,0,0))

try: turtle.dot(320)
except: pass
turtle.color((255,255,255),(255,255,0))
turtle.speed(0)
turtle.pensize(1)
try:
  for i in range(-1, 2, 2):
    turtle.penup()
    turtle.goto(80*i, 0)
    turtle.pendown()
    rosace((i > 0) and 21 or 30, (i > 0) and 12 or 8, 30, 12)
    turtle.pensize(2)
    turtle.pencolor((0,0,255))
except MemoryError as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Enfin ici aussi
KhiCAS
nous colorie les étoiles de la bonne couleur.

Sur la taille du disque de fond d'écran c'est ici aussi
KhiCAS
qui a raison et pas
TI
.

Exemple n°16 : La toile de l'araignée

Go to top

Suivons maintenant le fil de l'araignée :
Code: Select all
from ttl_fix import *

def spiral(a,b):
  turtle.pencolor((0,0,0))
  try: turtle.dot(320)
  except: pass
  turtle.pencolor((255,255,0))
  for i in range(189):
    for j in range(6):
      turtle.forward(i/a)
      turtle.left(23)
    turtle.left(b)
    try: turtle.dot(2)
    except: pass
   
turtle.speed(0)
turtle.colormode(255)
turtle.pensize(1)

a=17
b=194

spiral(a,b)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°17 : ♫ Le tournesol, le tournesol, ... ♫

Go to top

15443Terminons enfin avec un exemple absolument bluffant de réalisme pour du
turtle
, nous allons faire pousser un tournesol devant toi :
Code: Select all
from math import pi, sin, cos, sqrt
from ttl_fix import *

def spiral():
  phi = (1+sqrt(5))/2
  a  =0
  r = 0
  dr = 0.15
  turtle.penup()
  for i in range(300):
    turtle.forward(r)
    turtle.pencolor((0,0,0))
    try: turtle.dot(3)
    except: pass
    turtle.pencolor((205,133,63))
    try: turtle.dot(2)
    except: pass
    turtle.goto(0,0)
    turtle.setheading(0)
    a+=360/phi
    turtle.right(a)
    if a>=360:
      r+=dr
      a-=360   

def feuille(core,a):
    try: turtle.begin_fill()
    except: pass
    turtle.right(a/2)
    turtle.forward(core)
    turtle.left(a)
    turtle.forward(core)
    turtle.left(180-a)
    turtle.forward(core)
    turtle.left(a)
    turtle.forward(core)
    try: turtle.end_fill()
    except: pass

turtle.speed(0)
turtle.colormode(255)
turtle.pencolor((30,144,255))
try: turtle.dot(320)
except: pass

d=25
core=40
turtle.pencolor((160,82,45))
try: turtle.dot(40)
except: pass

c=((255,215,0),(255,255,0))

for i in range(2):
  turtle.color(c[0], c[i])
  for h in range(10*i,370,20):
    r=h * pi / 180
    x=d*cos(r)
    y=d*sin(r)
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.setheading(h)
    feuille(core,32)

spiral()

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ah, enfin notre tournesol commence à ressembler à un tournesol sur
KhiCAS
.

Sur le disque de fond d'écran, rappelons que c'est
KhiCAS
qui a raison.

Par contre, on déplore encore la délimitation incorrecte des graines dans le cœur.




Conclusion

Go to top

Selon notre outil de tests,
KhiCAS
pour
TI-Nspire CX
et
NumWorks N0110
est bien mieux conforme au standard
Python-turtle
que l'ensemble des solutions
turtle
officielles, et semble en conséquence bien mieux se comporter en pratique sur une majorité de nos exemples. nous semble offrir à ce jour la meilleure bibliothèque
Python turtle
toutes solutions confondues.

Les méthodes de remplissage, absentes des implémentations officielles de
Casio
et
NumWorks
t'ouvrent la porte à de formidables progrès.

Certes il y a encore quelques défauts et donc écarts par rapport au tracé obtenu avec la bibliothèque standard sur ordinateur, mais
KhiCAS
a l'avantage d'être régulièrement maintenu et de bénéficier de plusieurs mises à jour par an.

Les progrès sont déjà très significatifs par rapport à la version précédente, et nul doute qu'ils vont se poursuivre ! :bj:




Téléchargements

Go to top


TI-Nspire KhiCAS: Python-turtle étendu pour NumWorks & Nspire CX

New postby critor » 12 Apr 2022, 19:37

15120Pour accompagner en douceur la transition du
Scratch
au
Python
en Seconde, la plupart des solutions
Python
sur calculatrices graphiques offrent
turtle
, une bibliothèque permettant du tracé relatif comme en
Scratch
. On peut citer :
  • la
    NumWorks
    dont l'application
    Python
    intègre directement
    turtle
  • les
    Casio Graph 35+E II
    et
    Graph 90+E
    dont l'application
    Python
    intègre directement
    turtle
  • les
    TI-Nspire CX II
    sur lesquelles on peut rajouter la bibliothèque officielle
    turtle
    (anciennement
    ce_turtl
    )
    à l'environnement
    Python
  • les
    TI-83 Premium CE Edition Python
    (France)
    ,
    TI-84 Plus CE-T Python Edition
    (Europe)
    et
    TI-84 Plus CE Python
    (Amérique du Nord)
    , sur lesquelles on peut rajouter une bibliothèque
    turtle
    officielle
  • et
    KhiCAS

11302Aujourd'hui justement approfondissons ce dernier point, parlons du
turtle
de
KhiCAS
. Conçu par
Bernard Parisse
, enseignant-chercheur à l'Université de Grenoble,
KhiCAS
est la déclinaison sur calculatrices du logiciel de Mathématiques intégré
Xcas
. Disponible pour calculatrices
NumWorks N0110
,
TI-Nspire CX
,
Casio Graph 35+E II
et
Graph 90+E
,
KhiCAS
te donne donc accès à une interface unifiée ainsi qu'à des fonctionnalités haut de gamme peu importe la marque ou le modèle de ta calculatrice ! :bj:

12024Ce formidable environnement de Mathématiques et de sciences t'apporte bien des choses. Nous pouvons citer dans tous les cas :
  • la reprise du moteur de calcul formel
    GIAC
    développé pour
    Xcas
    par le même auteur.
  • la possibilité de programmer dans 2 langages :
    • le langage
      Xcas
      historique
    • le langage
      Xcas
      avec une couche de compatibilité syntaxique
      Python

Dans ses éditions pour
TI-Nspire CX
et
NumWorks N0110
,
KhiCAS
apporte pas mal de compléments :
  • possibilité de composer et convertir ses unités
  • une bibliothèque de constantes physiques
  • plusieurs applications elles-même intégrées, dont entre autres :
    • tableur / feuille de calcul
    • tableau périodique des éléments
    • calcul financier
  • 2 langages de programmation supplémentaires :
    • Python
      via un interpréteur
      Micropython
    • Javascript
      via un interpréteur
      QuickJS

L'environnement
Python
sur ces modèles est extrêmement riche, bien davantage que les solutions
Python
intégrées par les constructeurs. On peut citer nombre de bibliothèques :
  • cas
    et
    xcas
    pour appeler le moteur de calcul formel
    GIAC
    directement depuis tes scripts
    Python
  • cmath
    pour traiter directement tes calculs sur les nombres complexes en
    Python
  • linalg
    pour l'algèbre linéaire
  • arit
    pour l'arithmétique
  • ulab.scipy
    pour le calcul scientifique
  • ulab.numpy
    pour le calcul matriciel et vectoriel
  • plusieurs bibliothèque de tracés :
    • turtle
      pour les tracés relatifs à la
      Scratch
    • matplotlib
      pour les tracés dans un repère
    • graphic
      pour les tracés par pixels, accompagnée de
      casioplot
      pour la compatibilité avec les scripts graphiques
      Casio
      et
      kandinsky
      pour la compatibilité avec les scripts graphiques
      NumWorks
  • et bien d'autres :
    gc
    ,
    math
    ,
    micropython
    ,
    nsp
    ,
    pylab
    ,
    random
    ,
    sys
    ,
    time
    ,
    ubinascii
    ,
    ucollections
    ,
    uctypes
    ,
    uerrno
    ,
    uhashlib
    ,
    uheapq
    ,
    uio
    ,
    ujson
    ,
    ure
    ,
    ustruct
    ,
    uzlib

La dernière mise à jour de
KhiCAS
améliore justement les possibilités de la bibliothèque
turtle
. Elle est disponible à ce jour :
  • uniquement en version
    alpha
    pour
    TI-Nspire CX
  • en version stable pour
    NumWorks N0110
Découvrons ensemble les nouveautés.








A) Contenu bibliothèque

Go to top

Commençons donc par explorer le contenu de la bibliothèque
turtle
:
Code: Select all
import turtle
l = dir(turtle)
l
len(l)


Effectivement il y a bien des nouveauté, nous passons de 66 à 69 éléments. Nous disposons de 3 nouvelles méthodes :
  • .clear() pour effacer l'affichage sans réinitialiser la position de la tortue
  • .pos(), un alias court de .position() que l'on avait déjà pour récupérer la position de la tortue
  • .towards(x, y) pour obtenir l'angle d'orientation permettant d'atteindre les coordonnées fournies

Cela peut certes te paraître peu, bien que
.towards()
permette déjà d'aborder facilement des scripts bien plus ambitieux comme nous verrons plus bas.

Mais ça c'est juste pour les méthodes rajoutées ; il va rester à voir si il y a eu des améliorations sur le fonctionnement des méthodes déjà présentes.




B) Tests de conformité comparatifs
(toutes solutions turtle)

Go to top

Tentons pour le moment un autodiagnostic plus général des différences entres les ancienne et nouvelle bibliothèques
turtle
de
KhiCAS
, c'est-à-dire la vérification de tout ce qui peut différer du standard.

Voici des scripts en ce sens, une amélioration majeure de ceux développés dans le code de notre test de rentrée
QCC 2021
:
Code: Select all
_turtle_errors = 0

def _turtle_error(k):
  global _turtle_errors
  _turtle_errors |= 1 << k

# import turtle
try:
  import turtle
  if not "forward" in dir(turtle):
    turtle = turtle.Turtle()
except ImportError: #TI-83 Premium CE
  from ce_turtl import turtle
  _turtle_error(0)
try:
  turtle.clear()
except:
  turtle.reset()

# can turtle be patched ?
_fix_turtle = True
try:
  def _fixcolor(c): return c
  turtle._fixcolor = _fixcolor
except:
  _fix_turtle = False

# test color() + pencolor() + fillcolor()
if not "pencolor" in dir(turtle):
  pencolor = turtle.color
  _turtle_error(1)
else:
  pencolor = turtle.pencolor
if not "color" in dir(turtle):
  _turtle_error(2)
if not "fillcolor" in dir(turtle):
  _turtle_error(12)

if not "clear" in dir(turtle):
  _turtle_error(13)
if not "reset" in dir(turtle):
  _turtle_error(14)
if not "heading" in dir(turtle):
  _turtle_error(11)

# test color argument types
_color_types = 0
try:
  pencolor([0, 0, 0])
  _color_types |= 1 << 0
except: _turtle_error(4)
try:
  pencolor((0, 0, 0))
  _color_types |= 1 << 1
except: _turtle_error(5)
try:
  pencolor(0, 0, 0)
  _color_types |= 1 << 2
except: _turtle_error(6)
try:
  pencolor("black")
  _color_types |= 1 << 3
except: _turtle_error(7)

# test colormode()
if not "colormode" in dir(turtle):
  _turtle_error(3)

# test color strings
_colors_fix={
  "blue":(0,0,1),
  "green":(0,1,0),
  "red":(1,0,0),
  "cyan":(0,1,1),
  "yellow":(1,1,0),
  "magenta":(1,0,1),
  "white":(1,1,1),
  "orange":(1,0.65,0),
  "purple":(0.66,0,0.66),
  "brown":(0.75,0.25,0.25),
  "pink":(1,0.75,0.8),
  "grey":(0.66,0.66,0.66),
  "black":(0,0,0),
}
for c in tuple(_colors_fix.keys()):
  try:
    pencolor(c)
    _colors_fix.pop(c)
  except: pass
if len(_colors_fix):
  if _color_types & 1 << 3:
    _turtle_error(8)

# test circle(,)
try: turtle.circle(0,0)
except:
  _turtle_error(9)

#test towards
try: turtle.towards
except:
  _turtle_error(15)

# test for unfixable missing functions
_missing_fct=["write","pensize","dot"]
for f in tuple(_missing_fct):
  try:
    eval("turtle."+f)
    _missing_fct.remove(f)
  except: pass
if len(_missing_fct):
    _turtle_error(16)

_missing_alias=[
  ["backward","back","bk"],
  ["forward","fd"],
  ["right","rt"],
  ["left","lt"],
  ["position","pos"],
  ["goto","setpos","setposition"],
  ["setheading","seth"],
  ["pendown","pd","down"],
  ["penup","pu","up"],
  ["pensize","width"],
  ["showturtle","st"],
  ["hideturtle","ht"],
]
for aliases in tuple(_missing_alias):
  validf = None
  for f in tuple(aliases):
    try:
      eval("turtle."+f)
      validf = f
      aliases.remove(f)
      break
    except: pass
  for f in tuple(aliases):
    try:
      eval("turtle."+f)
      aliases.remove(f)
    except: pass
  if not len(aliases):
    _missing_alias.remove(aliases)
  else:
    aliases.insert(0, validf)
if len(_missing_alias):
    _turtle_error(17)

try:
  turtle.position()
except:
  try:
    turtle.pos()
  except:
    _turtle_error(10)
Code: Select all
from ttl_chk import *
from ttl_chk import _fix_turtle, _turtle_errors, _colors_fix, _missing_fct, _missing_alias

def turtle_diags():
  print("Type: " + str(type(turtle)))
  print("Patchable: " + (_fix_turtle and "yes" or "no"))
  errors_msg = (
    "No <import turtle>",
    "No pencolor()",
    "No color()",
    "No colormode()",
    "No color as list",
    "No color as tuple",
    "No color as args",
    "No color as string",
    "Missing colors strings: ",
    "No circle(,angle)",
    "Can't get position()",
    "No heading()",
    "No fill",
    "No clear()",
    "No reset()",
    "No towards()",
    "Other missing: ",
    "Missing aliases: ",
  )
  errors = 0
  for k in range(len(errors_msg)):
    if _turtle_errors & 1 << k:
      errors += 1
      msg = "Err " + str(k) + ": " + errors_msg[k]
      if k == 8:
        msg += str(len(_colors_fix)) + " " + str(tuple(_colors_fix.keys()))
      if k == 16:
        msg += str(len(_missing_fct)) + " " + " ".join(_missing_fct)
      if k == 17:
        l = []
        for v in _missing_alias:
          l.extend(v[1:])
        msg += str(len(l)) + " " + " ".join(l)
      print(msg)
  print(str(errors) + " error" + ((errors > 1) and "s" or ""))

turtle_diags()


Voici ce que nous racontent les scripts sur les différentes solutions
turtle
:

TI-83PCE/84+CE
turtle


TI-Nspire CX II
turtle

Casio
Graph 90E


nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl


NumWorks

Casio
Graph 35+E II


ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


On confirme donc avec la nouvelle version
KhiCAS
l'ajout des 3 méthodes jusqu'alors manquantes.

Mais surtout il n'y a donc dans l'état actuel des scripts plus aucune erreur détectée automatiquement, chose exceptionnelle si l'on compare aux solutions officielles, et signe d'un soin minutieux !

Mais ça, c'est pour les problèmes détectables par des vérifications automatisées. Voyons maintenant d'éventuels écarts visuels sur quelques exemples de scripts.

Afin de pouvoir comparer équitablement avec les solutions officielles visiblement parfois bien moins conformes au standard
turtle
tout en conservant une unique version de chaque script utilisable sur l'ensemble des solutions, voici un script qu'il suffira d'importer à la place de chaque bibliothèque
turtle
et qui, lorsque celle-ci sera modifiable, corrigera la plupart des erreurs détectées : :bj:
Code: Select all
from ttl_chk import *
from ttl_chk import _color_types, _turtle_errors, _colors_fix, _missing_fct, _missing_alias

_fix_turtle = True

def nop(*argv): return None
idty = lambda c: c

try: # can turtle be patched ?
  turtle._fixcolorlist = idty
  turtle._fixcolorval = idty
  turtle._fixcolorstring = idty
  turtle._fixcolorargs = idty
  turtle._fixcolor = lambda c: turtle._fixcolorlist(turtle._fixcolorval(turtle._fixcolorstring(turtle._fixcolorargs(c))))
except:
  _fix_turtle = False

if _fix_turtle:

  # fix color() + pencolor()
  if _turtle_errors & 0x1000:
    turtle.fillcolor, turtle.begin_fill, turtle.end_fill = idty, nop, nop
  if _turtle_errors & 2:
    def _pencolor_(*argv):
      if len(argv): turtle.color(argv)
      else: return turtle.color()[0]
    turtle.pencolor = _pencolor_
  if _turtle_errors & 4:
    def _color_(*argv):
      if len(argv) == 2:
        turtle.pencolor(argv[0])
        turtle.fillcolor(argv[1])
      elif len(argv):
        turtle.pencolor(argv)
      else:
        return (turtle.pencolor(), turtle.fillcolor())
    turtle.color = _color_

  _fix_color = _color_types & 0b11 != 0b11 or not "colormode" in dir(turtle)

  # fix list/tuple color argument
  if _color_types & 0b11 == 0b10:
    def _fixcolorlist(c): return type(c) is list and tuple(c) or c
    turtle._fixcolorlist = _fixcolorlist
  if _color_types & 0b11 == 0b01:
    def _fixcolorlist(c): return type(c) is list and list(c) or c
    turtle._fixcolorlist = _fixcolorlist
  if not _color_types & 4:
    def _fixcolorargs(*argv):
      return len(argv) != 1 and argv or argv[0]

  if _fix_color:
    turtle._color = turtle.color
    turtle._pencolor = turtle.pencolor
    turtle._fillcolor = turtle.fillcolor
    if _color_types & 0b11:
      def _color(*argv):
        n = len(argv)
        if not(n): return turtle._color()
        elif n==2: turtle._color(argv[0], argv[1])
        else: turtle._color(n > 1 and argv or argv[0])
      def _pencolor(*argv):
        if not(len(argv)): return turtle._pencolor()
        turtle._pencolor(turtle._fixcolor(len(argv) > 1 and argv or argv[0]))
      def _fillcolor(*argv):
        if not(len(argv)): return turtle._fillcolor()
        turtle._fillcolor(turtle._fixcolor(len(argv) > 1 and argv or argv[0]))
    else:
      def _color(*argv):
        n = len(argv)
        if not(n): return turtle._color()
        c = turtle._fixcolor(n == 3 and argv or argv[0])
        turtle._color(c[0], c[1], c[2])
      def _pencolor(*argv):
        if not(len(argv)): return turtle._pencolor()
        c = turtle._fixcolor(len(argv)>1 and argv or argv[0])
        turtle._pencolor(c[0], c[1], c[2])
      def _fillcolor(*argv):
        if not(len(argv)): return turtle._fillcolor()
        c = turtle._fixcolor(len(argv)>1 and argv or argv[0])
        turtle._fillcolor(c[0], c[1], c[2])
    turtle.color = _color
    turtle.pencolor = _pencolor
    turtle.fillcolor = _fillcolor

  # fix colormode()
  if _turtle_errors & 8:
    # test color mode
    try:
      turtle.pencolor([255, 0, 0])
      _color_mode = 255
    except: _color_mode = 1.0
    turtle._color_mode = _color_mode
    def _colormode(*argv):
      if not(len(argv)): return turtle._color_mode
      if int(argv[0]) in (1, 255):
        turtle._color_mode = int(argv[0]) == 255 and 255 or 1.0
    turtle.colormode = _colormode
    if _color_mode == 255:
      turtle._fixcolorval = lambda c: int(turtle._color_mode) == 1 and type(c) in (list, tuple) and [int(c[k] * 255) for k in range(3)] or c
    else:
      turtle._fixcolorval = lambda c: turtle._color_mode == 255 and type(c) in (list, tuple) and [c[k] / 255 for k in range(3)] or c

  # fix color strings
  if len(_colors_fix):
    def _fixcolorstring(c):
      if type(c) is str and c in _colors_fix:
        c = _colors_fix[c]
        if turtle.colormode() == 255:
          c = [int(c[k] * 255) for k in range(3)]
      return c
    turtle._fixcolorstring = _fixcolorstring

  # fix circle(,)
  if _turtle_errors & 0x200:
    turtle._circle = turtle.circle
    def _circle(r, a=360): turtle._circle(r)
    turtle.circle = _circle

  if len(_missing_fct):
    for f in _missing_fct:
      exec("turtle."+f+"=nop")

  if len(_missing_alias):
    for aliases in _missing_alias:
      validf = aliases[0]
      for f in aliases[1:]:
        exec(validf and "turtle."+f+"=turtle."+validf or "turtle."+f+"=nop")

  # fix clear()
  if _turtle_errors & 0x2000:
    turtle.clear = turtle.reset

  # fix reset()
  if _turtle_errors & 0x4000:
    turtle.reset = turtle.clear

  # fix towards()
  if _turtle_errors & 0x8000:
    from math import atan2, pi
    def _towards(x, y):
      x0, y0 = turtle.pos()
      return atan2(y - y0, x - x0) * 180 / pi
    turtle.towards = _towards




C) 17 exemples comparatifs
(toutes solutions turtle)

Go to top

Maintenant que nous avons de quoi faire tourner une unique version de chaque script sur l'ensemble des machines, poursuivons donc l'exploration de l'ensemble des solutions
turtle
avec quelques exemples de script.

Nous allons en profiter pour nous en donner à cœur joie avec les formidables fonctions de remplissage rajoutées dans l'avant-dernière version de
KhiCAS
, sur le thème de .

C'est donc l'occasion de voir si il y avait d'autres problèmes qui n'ont pas pu être détectés automatiquement, et si ils sont toujours présents dans la dernière version.

Plusieurs des exemples qui vont suivre sont inspirés de publications de pour
TI-Nspire CX II
et très librement et fortement adaptés pour être fonctionnels dans le contexte du
heap
Python
bien plus restreint des
TI-83 Premium CE
et compatibles.


Exemple n°1 : La dalle aux ammonites

Go to top

C'est donc parti pour quelques exemples afin d'approfondir les améliorations de la nouvelle bibliothèque
turtle
pour
TI-83 Premium CE Edition Python
et compatibles, ainsi que les points forts et faibles par rapport aux autres modèles de calculatrices.

Précisons que les problèmes récurrents ne seront pas systématiquement réévoqués sur chaque exemple.

Un petit peu au Nord de Digne-les-bains en rive droite de la Bléone se trouve la dalle aux ammonites. Comme il est strictement interdit d'en prélever, voici de quoi en reproduire une sur ta calculatrice :
Code: Select all
from ttl_fix import *
from math import pi

turtle.speed(0)
turtle.pencolor((0,0,0))
turtle.pendown()
turtle.pensize(1)

turtle.goto(0,-8)
x,y = turtle.pos()
turtle.left(115)
for i in range(132):
  turtle.forward(10)
  try:
    h = turtle.towards(x,y)
    turtle.setheading(h)
  except: pass
  d=10*pi
  turtle.forward(d)
  turtle.backward(d)
  turtle.right(90)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


KhiCAS
ainsi que le
turtle
officiel de la
NumWorks
avaient un tracé incorrect ici, car la méthode
.towards()
était absente de leur implémentation de
turtle
. Et malheureusement, la bibliothèque
turtle
n'est dans ces deux cas pas altérable à l'exécution ce qui empêchait notre script de corriger.

Concernant
KhiCAS
ce manque est maintenant comblé, et visiblement parfaitement fonctionnel !

Exemple n°2 : Le défilé automobile

Go to top

Nous t'emmenons maintenant au défilé avec les logos de plusieurs grands constructeurs... automobiles :
Code: Select all
from ttl_fix import *

def rpoly(c, n):
  for k in range(n):
    turtle.forward(c)
    turtle.left(360 / n)

def audi(r):
  ir = 2 * r // 13
  turtle.penup()
  turtle.left(90)
  turtle.forward(r//2 - 2*ir)
  turtle.right(90)
  turtle.forward(-ir)
  turtle.pendown()
  turtle.pensize(3)
  for i in range(4):
    turtle.penup()
    turtle.forward(3 * ir)
    turtle.pendown()
    turtle.circle(2 * ir)

def mercedez_benz(r):
  ir = r // 2
  turtle.penup()
  turtle.forward(ir)
  turtle.left(90)
  turtle.forward(ir)
  turtle.pendown()
  turtle.pensize(2)
  x, y = turtle.pos()
  turtle.setheading(210)
  for i in range(3):
    turtle.goto(x,y)
    turtle.forward(ir)
    turtle.left(120)
  turtle.setheading(0)
  turtle.circle(-ir)

def citroen(r):
  x,y=turtle.pos()
  turtle.setheading(0)
  turtle.color((255,0,0), (255,0,0))
  turtle.begin_fill()
  rpoly(r, 4)
  turtle.end_fill()
  turtle.fillcolor((255,255,255))
  for i in range(2):
    turtle.setheading(45)
    turtle.begin_fill()
    for k in range(2):
      turtle.forward(.71 * r)
      turtle.left(k and 172 or -90)
    for k in range(2):
      turtle.forward(5 * r / 6)
      turtle.left(106)
    turtle.end_fill()
    y += r / 3
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()

def mitsubichi(r):
  ir = r // 3
  turtle.penup()
  turtle.left(90)
  turtle.forward(ir)
  turtle.right(90)
  turtle.forward(r // 2)
  turtle.pendown()
  for i in range(3):
    turtle.setheading(60 + 120*i)
    turtle.color((255,0,0), (255,0,0))
    turtle.begin_fill()
    for k in range(4):
      turtle.forward(ir)
      turtle.left((k%2) and 120 or 60)
    turtle.end_fill()

def jeep(r):
  a=54
  ir = r/0.47552825814758/4 #sin(radians(a))/cos(radians(a))
  a=ir/0.85
  d=0.93*ir
  turtle.penup()
  turtle.forward(r//2)
  turtle.right(90)
  turtle.forward(ir - r)
  turtle.pendown()
  x, y = turtle.pos()
  turtle.setheading(234)
  turtle.forward(ir)
  turtle.left(126)
  turtle.fillcolor((180,180,180))
  turtle.begin_fill()
  rpoly(a, 5)
  turtle.end_fill()
  for i in range(5):
    col = i < 3 and (0,0,0) or (255,255,255)
    for j in range(2):
      turn =  j and turtle.left or turtle.right
      turtle.goto(x,y)
      turtle.setheading(90 + 72*i)
      turtle.fillcolor(col)
      turtle.begin_fill()
      turtle.forward(d)
      turn(172)
      turtle.forward(0.85*d)
      turn(44)
      turtle.forward(0.2*d)
      turtle.end_fill()
      col = [255 - col[k] for k in range(3)]

turtle.speed(0)
turtle.colormode(255)

r = 92
for iy in range(2):
  for ix in range(3):
    i = iy*3+ix
    if i < 5:
      y, x = (2*iy - 1) * r//2 - 48, (ix - 1)*r - 50
      turtle.penup()
      turtle.goto(x, y)
      turtle.setheading(0)
      turtle.pensize(1)
      turtle.pencolor((0,0,0))
      turtle.pendown()
      (mercedez_benz,jeep,mitsubichi,citroen,audi)[i](r)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Sur cet exemple,
KhiCAS
reste l'une des solutions
turtle
qui s'en tire hélas le moins bien.

Toutefois on peut remarquer une petite amélioration depuis la dernière fois ; la couleur de remplissage passé en 2ème paramètre de la méthode .color(,) n'est plus ignorée et est maintenant gérée correctement.

Exemple n°3 : L'escargot de lumière

Go to top

Si tu es dans le Sud de la France tu sais qu'il ne pleut pas souvent
(par contre, quand il pleut... il pleut !)
. Alors voici pour toi un escargot bariolé :
Code: Select all
from math import exp
from ttl_fix import *

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(1.0)

turtle.penup()
turtle.goto(0, -20)
turtle.pendown()
turtle.right(90)
for i in range(20):
  c = [exp(-.5 * ((i - k) / 12)**2) for k in (6, 18, 30)]
  cb = [v/2 for v in c]
  turtle.color(cb, c)
  try: turtle.begin_fill()
  except: pass
  turtle.circle(27 + i)
  try: turtle.end_fill()
  except: pass
  turtle.right(10)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ici pour la même raison,
KhiCAS
se range maintenant avec les meilleures solutions
turtle
!

Exemple n°4 : Les flocons de Koch

Go to top

Encore une fois si tu es dans le Sud de la France, tu n'a pas dû voir de neige depuis des années... Faison donc neiger dans ta calculatrice maintenant, faisons neiger des
flocons de Koch
:
Code: Select all
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def koch(n, l):
  if n<=0:
    turtle.forward(l)
  else:
    koch(n - 1, l / 3)
    turtle.left(60)
    koch(n - 1, l / 3)
    turtle.right(120)
    koch(n - 1, l / 3)
    turtle.left(60)
    koch(n - 1, l / 3)

def flock(n, l):
  koch(n, l)
  turtle.right(120)
  koch(n, l)
  turtle.right(120)
  koch(n, l)

turtle.speed(0)
turtle.colormode(255)

c = [127, 255, 0]
l = 80
for j in range(2):
  for i in range(3):
    n = j and 3 + i or 2 - i
    s = 5 - n
    turtle.penup()
    turtle.goto(i*117-157, j*95-25)
    turtle.pencolor(tuple(c))
    turtle.pensize(s)
    turtle.setheading(0)
    turtle.pendown()
    flock(n, l)
    n += 1
    rotate_list(c)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Ici par contre, toujours le problème de mauvaise couleur pour le dernier flocon tracé avec
KhiCAS
.

Mais cela reste malgré tout mieux que d'autres solutions officielles.

Exemple n°5 : La linea

Go to top

Code: Select all
try: #TI-83 Premium CE
  from ti_system import disp_clr
  disp_clr()
except: pass
from ttl_fix import *

def spiral(k,a,l):
  x0, y0 = turtle.pos()
  h0 = turtle.heading()
  while True:
    for s in l:
      turtle.forward(s*k)
      turtle.left(180-a)
    x, y = turtle.pos()
    if abs(x - x0) + abs(y - y0) + abs(turtle.heading() - h0) <= 1:
      break

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)
turtle.color((0,0,0),(255,255,0))

try:
  for i in range(-1, 2, 2):
    turtle.penup()
    turtle.goto(80*i - ((i > 0) and 40 or 50), 0)
    turtle.pendown()
    try: turtle.begin_fill()
    except: pass
    spiral((i > 0) and 9 or 30, (i > 0) and 90 or 36, (i > 0) and (1,2,3,4,5,6,7,8,9) or (1,2,3))
    try: turtle.end_fill()
    except: pass
except MemoryError as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Certes cette fois-ci
KhiCAS
remplit la forme de gauche de la bonne couleur, mais ne remplit bizarrement plus correctement celle de droite...

Exemple n°6 : Pavage d'une lagogne

Go to top

Partons maintenant à la pêche avec un script très hautement impressionnant par rapport aux contraintes de
heap
des
TI-83 Premium CE
et compatibles ; ici nous sommes vraiment sur le fil de la limite des possibilités concernant ces modèles.

Voici donc une lagogne littéralement pavée de poissons :
Code: Select all
from math import sqrt
from ttl_fix import *

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)
turtle.pencolor((0,0,0))

a=16

try:
  j = 0
  while -5 < j < 4:
    col = ((0,0,255),(255,0,0),(255,180,0))[j%3]
    i = 0
    while -2 + (j % 2) < i < 2:
      for c in range(3):
        turtle.penup()
        turtle.goto(sqrt(3)*3*a*(i*2-(j%2)), 3*a*j)
        turtle.setheading(-30 + 120*c)
        turtle.pendown()
        turtle.fillcolor(col)
        turtle.begin_fill()
        for k in range(-17, 18):
          l = a*sqrt(7)
          tf = ((1,141.787), (0,l), (1,-100.893), (0,a), (1,120), (0,a/2), [1,-120], [0,-a], [0,a], [1,120], (0,a/2), (1,60), (0,a), (1,-120), (0,a), (1,100.893), (0,l), [1,-40.893])[abs(k)]
          if k==6 or k==9 or k==17: tf[1] -= 180
          elif k==7 or k==8: tf[1] *= -1
          (turtle.forward, turtle.left)[tf[0]](tf[1])
        turtle.end_fill()
        turtle.forward(6*a)
        turtle.backward(5*a)
        turtle.penup()
        turtle.right(90)
        l = a*sqrt(3)/6
        for k in range(2):
          turtle.forward(l)
          turtle.pencolor((255,255,255))
          turtle.dot(a//4)
          turtle.pencolor((0,0,0))
          turtle.dot(a//8)
          turtle.backward(l)
          turtle.left(180)
      i = -i + (i <= 0)
    j = -j - (j >= 0)
except Exception as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Malheureusement pas d'amélioration ici, les poissons continuent à ne pas se comporter correctement sous
KhiCAS
.

Exemple n°7 : Le triangle de Penrose

Go to top

Tu n'as jamais touché à un triangle de
Penrose
? Et bien voici de quoi en afficher le plan dans ta calculatrice, tu n'auras plus qu'à l'imprimer en 3D, si tu arrives à comprendre où est le devant et l'arrière : ;)
Code: Select all
from math import sqrt
from ttl_fix import *

def hook(a, c):
  turtle.penup()
  turtle.goto(0,-15)
  turtle.setheading(a)
  turtle.forward((l - 4*b) / sqrt(3))
  turtle.right(150)
  turtle.pendown()
  lf = ((turtle.left, 60),[turtle.forward,b],(turtle.left,120),(turtle.forward,l-b),[turtle.right,120],[turtle.forward,l-3*b])
  try:
    turtle.fillcolor(c)
    turtle.begin_fill()
  except: pass
  for k in range(-len(lf) + 1, len(lf)):
    tf = lf[abs(k)]
    if k == 1: tf[1] = l
    elif k == 4: tf[0] = turtle.left
    elif k == 5: tf[1] = b
    tf[0](tf[1])
  try: turtle.end_fill()
  except: pass
 
turtle.speed(0)
turtle.pensize(2)
turtle.colormode(255)

l=180
b=23

for i in range(112):
  turtle.pencolor(232 - int(i * 23 / 11), 249 - int(i * 29 / 55), 255)
  turtle.penup()
  turtle.goto(-192, 111 - 2*i)
  turtle.pendown()
  turtle.forward(384)

turtle.pencolor((0,0,0))
turtle.pensize(1)

hook(330, (255,255,0))
hook(90, (0,0,255))
hook(210, (255,0,0))

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°8 : La courtepointe de Mamie

Go to top

Voici maintenant la courtepointe brodée avec amour et soin par Mamie :
Code: Select all
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def poly_reg_a(l, a):
  h0 = turtle.heading()
  while True:
    turtle.forward(l)
    turtle.left(a)
    if abs(h0 - turtle.heading()) < .1:
      break

turtle.hideturtle()
turtle.speed(0)
turtle.pensize(1)
turtle.colormode(255)

c = [191, 127, 0]
cf = [127, 255, 0]
i = 0
while i > -3:
  j = 0
  while j > -2:
    turtle.penup()
    turtle.goto((i - 1)*88, (j - 1)*85 + 28)
    turtle.pendown()
    turtle.color(c, cf)
    try: turtle.begin_fill()
    except: pass
    poly_reg_a(80, 140)
    try: turtle.end_fill()
    except: pass
    rotate_list(c)
    rotate_list(cf)
    j = -j + (j <= 0)
  i = -i + (i <= 0)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


C'est bon ici,
KhiCAS
choisit enfin des fils de la bonne couleur pour broder la courtepointe !

Exemple n°9 : Les vitraux rhombiques

Go to top

Voici maintenant une belle rosace rhombique pour décorer le bâtiment de ton choix.

Nous utilisons ici la méthode
.dot()
permettant de remplir un disque de diamètre donné, afin de générer de quoi avoir une couleur de fond d'écran sur nos calculatrices, suffit-il juste de lui spécifier un diamètre suffisamment grand :
Code: Select all
from ttl_fix import *

turtle.speed(0)
turtle.colormode(255)
turtle.pencolor((0,0,255))
turtle.dot(320)
turtle.pencolor((0,0,0))
turtle.pensize(2)
col = ((255,0,0),(255,255,0),(0,255,0),(255,255,255),(255,0,255))
a=60

for i in range(10):
  c = col[i%5]
  turtle.color(c, c)
  turtle.begin_fill()
  for j in range(5):
    turtle.forward(a)
    turtle.right(72)
  turtle.end_fill()
  turtle.right(36)

for i in range(10):
  c = [v//3 for v in col[i%5]]
  turtle.pencolor(c)
  for j in range(5):
    turtle.forward(a)
    turtle.right(72)
  turtle.right(36)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Bonne nouvelle ici encore,
KhiCAS
nous peint enfin les vitraux de la bonne couleur ! :bj:

Par rapport au fond bleu, notons que c'est cette nouvelle version de
KhiCAS
qui adopte le comportement correct. Selon le standard
turtle
, la méthode
.dot()
attend en paramètre le diamètre du disque à tracer. Ce sont les modèles
Texas Instruments
qui le considèrent à tort comme un rayon et remplissent alors tout l'écran.

Exemple n°10 : Les roses par 12

Go to top

Voici maintenant une rose, cette fois-ci sur un fond d'écran en dégradé radial. Nous utiliserons pour cela cette fois-ci une boucle de
.dot()
:
Code: Select all
from math import pi, sin, cos, sqrt
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)
def carre(c): rpoly(c, 4)

turtle.speed(0)
turtle.colormode(255)
turtle.penup()

r=80
alpha=(15 * pi / 180)

for i in range(320):
  c=int(255/320*i)
  turtle.pencolor(c,c,c)
  try: turtle.dot(320-i)
  except: pass

turtle.goto(20,-76)
turtle.color((255,255,255),(0,0,0))

for i in range(4):
  a=r*sin(alpha)*2
  d=a/sqrt(2)
  turtle.pendown()
  for i in range(12):
    turtle.right(15)
    try: turtle.begin_fill()
    except: pass
    carre(d)
    try: turtle.end_fill()
    except: pass
    turtle.left(45)
    turtle.penup()
    turtle.forward(a)
    turtle.pendown()
  turtle.penup()
  turtle.left(75)
  turtle.forward(d)
  turtle.right(60)
  r=r*cos(alpha)-a/2

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


KhiCAS
nous colorie enfin les pétales correctement !

Et sur la taille du disque de fond d'écran, c'est
KhiCAS
qui fait comme il faut.

Exemple n°11 : Les triangles de Sierpiński

Go to top

Revenons aux fractales et à la récursivité avec les
triangles de Sierpiński
. As-tu déjà réussi à les compter ? Et bien voici de quoi commencer sur ta calculatrice :
Code: Select all
from ttl_fix import *

def sierp(n, l):
  if n == 0:
    for i in range (0, 3):
      turtle.forward(l)
      turtle.left(120)
  if n > 0:
    sierp(n - 1, l / 2)
    turtle.forward(l / 2)
    sierp(n - 1, l / 2)
    turtle.backward(l / 2)
    turtle.left(60)
    turtle.forward(l / 2)
    turtle.right(60)
    sierp(n - 1, l / 2)
    turtle.left(60)
    turtle.backward(l / 2)
    turtle.right(60)

turtle.colormode(255)
turtle.speed(0)
turtle.pensize(1)

turtle.penup()
turtle.goto(-110, -95)
turtle.pendown()
turtle.pencolor((255,0,0))
sierp(6, 220)
turtle.penup()
turtle.forward(400)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°12 : Sous le soleil exactement

Go to top

Plaçons-nous maintenant
sous le soleil exactement
, profitant ainsi de toutes les couleurs de la lumière blanche :
Code: Select all
from math import exp
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)
def carre(c): rpoly(c, 4)

turtle.speed(0)
turtle.pensize(1)
turtle.colormode(1.0)

n = 36
for i in range(n):
  k=.4 + 4*i/255
  cp = [.7*exp(-.5 * ((n - i - k) / (n / 3))**2) for k in (6, 18, 30)]
  turtle.pencolor(cp)
  try:
    turtle.fillcolor((k,k,0))
    turtle.begin_fill()
  except: pass
  carre(60)
  try: turtle.end_fill()
  except: pass
  turtle.right(360 / n)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Du changement ici encore sur
KhiCAS
, notre soleil émet maintenant dans les bonnes longueurs d'onde !

Exemple n°13 : Le labyrinthe du Minotaure

Go to top

Explorons maintenant dans la labyrinthe du Minotaure :
Code: Select all
from ttl_fix import *

turtle.speed(0)
turtle.colormode(255)
turtle.pendown()

turtle.right(48)
turtle.pencolor((0,0,0))
for i in range(98):
  turtle.forward(2*i)
  turtle.left(90.5)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ah c'est bon cette fois-ci, le labyrinthe se construit maintenant correctement sur
KhiCAS
Dédale et Minos seront contents. ;)

Exemple n°14 : Le carreau de carreaux

Go to top

Code: Select all
from math import sqrt
from ttl_fix import *

def rotate_list(l):
  l[1:],l[0] = l[0:-1],l[-1]

def reg_poly(l, n):
  for i in range(n):
    turtle.forward(l)
    turtle.left(360/n)

def square(l):
  reg_poly(l, 4)

turtle.colormode(255)
turtle.pencolor(0,0,0)
turtle.speed(0)

turtle.pensize(3)
d=190
c=[0,255,127]
turtle.penup()
turtle.goto(-d/2,-d/2)
turtle.setheading(0)
turtle.pendown()
for i in range(8):
  try:
    turtle.fillcolor(tuple(c))
    turtle.begin_fill()
  except: pass
  square(d)
  try:
    turtle.end_fill()
  except: pass
  turtle.penup()
  turtle.forward(d/2)
  turtle.left(45)
  turtle.pendown()
  d/=sqrt(2)
  rotate_list(c)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°15 : Les étoiles jumelles

Go to top

Code: Select all
try: # TI-83 Premium CE
  from ti_system import disp_clr
  disp_clr()
except: pass
from ttl_fix import *

def rpoly(c, n):
  a=360/n
  for k in range(n):
    turtle.forward(c)
    turtle.left(a)

def rosace(c, n1, a, n2):
  try: turtle.begin_fill()
  except: pass
  for i in range(n2):
    turtle.left(a)
    rpoly(c, n1)
  try: turtle.end_fill()
  except: pass

turtle.colormode(255)
turtle.pencolor((0,0,0))

try: turtle.dot(320)
except: pass
turtle.color((255,255,255),(255,255,0))
turtle.speed(0)
turtle.pensize(1)
try:
  for i in range(-1, 2, 2):
    turtle.penup()
    turtle.goto(80*i, 0)
    turtle.pendown()
    rosace((i > 0) and 21 or 30, (i > 0) and 12 or 8, 30, 12)
    turtle.pensize(2)
    turtle.pencolor((0,0,255))
except MemoryError as e: print(e)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Enfin ici aussi
KhiCAS
nous colorie les étoiles de la bonne couleur.

Sur la taille du disque de fond d'écran c'est ici aussi
KhiCAS
qui a raison et pas
TI
.

Exemple n°16 : La toile de l'araignée

Go to top

Suivons maintenant le fil de l'araignée :
Code: Select all
from ttl_fix import *

def spiral(a,b):
  turtle.pencolor((0,0,0))
  try: turtle.dot(320)
  except: pass
  turtle.pencolor((255,255,0))
  for i in range(189):
    for j in range(6):
      turtle.forward(i/a)
      turtle.left(23)
    turtle.left(b)
    try: turtle.dot(2)
    except: pass
   
turtle.speed(0)
turtle.colormode(255)
turtle.pensize(1)

a=17
b=194

spiral(a,b)

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II


Exemple n°17 : ♫ Le tournesol, le tournesol, ... ♫

Go to top

15443Terminons enfin avec un exemple absolument bluffant de réalisme pour du
turtle
, nous allons faire pousser un tournesol devant toi :
Code: Select all
from math import pi, sin, cos, sqrt
from ttl_fix import *

def spiral():
  phi = (1+sqrt(5))/2
  a  =0
  r = 0
  dr = 0.15
  turtle.penup()
  for i in range(300):
    turtle.forward(r)
    turtle.pencolor((0,0,0))
    try: turtle.dot(3)
    except: pass
    turtle.pencolor((205,133,63))
    try: turtle.dot(2)
    except: pass
    turtle.goto(0,0)
    turtle.setheading(0)
    a+=360/phi
    turtle.right(a)
    if a>=360:
      r+=dr
      a-=360   

def feuille(core,a):
    try: turtle.begin_fill()
    except: pass
    turtle.right(a/2)
    turtle.forward(core)
    turtle.left(a)
    turtle.forward(core)
    turtle.left(180-a)
    turtle.forward(core)
    turtle.left(a)
    turtle.forward(core)
    try: turtle.end_fill()
    except: pass

turtle.speed(0)
turtle.colormode(255)
turtle.pencolor((30,144,255))
try: turtle.dot(320)
except: pass

d=25
core=40
turtle.pencolor((160,82,45))
try: turtle.dot(40)
except: pass

c=((255,215,0),(255,255,0))

for i in range(2):
  turtle.color(c[0], c[i])
  for h in range(10*i,370,20):
    r=h * pi / 180
    x=d*cos(r)
    y=d*sin(r)
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.setheading(h)
    feuille(core,32)

spiral()

try: turtle.show() #TI-83 Premium CE
except: pass


TI-83PCE/84+CE
turtle

TI-Nspire CX II
turtle

Casio
Graph 90+E

nouveau
KhiCAS
NumWorks
TI-Nspire CX II CX

TI-83PCE/84+CE
ce_turtl

NumWorks

Casio
Graph 35+E II

ancien
KhiCAS
NumWorks
TI-Nspire CX II CX


Ah, enfin notre tournesol commence à ressembler à un tournesol sur
KhiCAS
.

Sur le disque de fond d'écran, rappelons que c'est
KhiCAS
qui a raison.

Par contre, on déplore encore la délimitation incorrecte des graines dans le cœur.




Conclusion

Go to top

Selon notre outil de tests,
KhiCAS
pour
TI-Nspire CX
et
NumWorks N0110
est bien mieux conforme au standard
Python-turtle
que l'ensemble des solutions
turtle
officielles, et semble en conséquence bien mieux se comporter en pratique sur une majorité de nos exemples. nous semble offrir à ce jour la meilleure bibliothèque
Python turtle
toutes solutions confondues.

Les méthodes de remplissage, absentes des implémentations officielles de
Casio
et
NumWorks
t'ouvrent la porte à de formidables progrès.

Certes il y a encore quelques défauts et donc écarts par rapport au tracé obtenu avec la bibliothèque standard sur ordinateur, mais
KhiCAS
a l'avantage d'être régulièrement maintenu et de bénéficier de plusieurs mises à jour par an.

Les progrès sont déjà très significatifs par rapport à la version précédente, et nul doute qu'ils vont se poursuivre ! :bj:




Téléchargements

Go to top


Zero Spécifications complètes Zero: STM32F413, 5M Flash, 832K RAM

New postby critor » 11 Apr 2022, 09:35

Dans une actualité précédente nous t'annoncions pour la rentrée 2022 la sortie d'une toute nouvelle calculatrice graphique, la
Zero
par l'entreprise du même nom
(façon de faire qui rappelle la
NumWorks
)
. Le projet se veut offrir une version améliorée et plus abordable de la
TI-84 Plus CE
, équivalent à l'international de notre
TI-83 Premium CE
française, tout en étant compatible avec ces dernières niveau utilisation.

Par rapport à ce dernier point, on peut justement noter les claviers aux inscriptions absolument identiques :


Les nombreuses améliorations concernent le logiciel et le matériel.

Niveau logiciel par exemple, on peut noter une fenêtre graphique tirant grandement profit de la définition en
320×240
pixels de l'écran, alors que
Texas Instruments
la limite pour sa part à une zone centrale de
265×165
pixels alors entourée d'une épaisse bordure inesthétique et totalement inutile sur ses parties latérales.

Niveau matériel, le site officiel annonce par rapport à la
TI-84 Plus CE
:
  • à la place du processeur 8 bits
    eZ80
    à
    48 MHz
    , un 32 bits à pas moins de
    100 MHz
    ! :bj:
  • à la place de l'antique port
    mini-USB AB
    , une connectivité
    USB
    enfin contemporaine et facile avec un port
    USB-C
    , première calculatrice graphique au monde à nous proposer cette évolution tant attendue ! :bj:
  • par rapport aux
    4 Mio
    de
    Flash
    20% de stockage supplémentaire, ce qui nous amène donc à
    5 Mio

Par la suite nous creusions un petit peu la chose :
  • D'une part sur la mémoire
    Flash
    , nous expliquions que les
    5 Mio
    étaient probablement répartis sur 2 puces de capacités respectives
    4 Mio
    et
    1 Mio
    , règle binaire des puissances de 2 oblige. La dissymétrie suggérait de plus que les
    1 Mio
    étaient probablement internes à une puce microcontrôleur.
  • D'autre part sur l'identification de ce mystérieux processeur 32 bits à
    100 MHz
    , grâce au travail de nous expliquions qu'il s'agissait d'un processeur
    Cortex-M4
    implémentant l'architecture
    ARMv7
    , exactement comme sur la première
    NumWorks
    , la
    N0100
    de la rentrée 2017.

Toutfois niveau microcontrôleur renfermant le processeur en question, nous étions restés sur une hésitation :
  • soit le avec
    1 Mio
    de
    Flash
    interne et
    256 Kio
    de
    RAM
    , comme la
    NumWorks N0100
  • soit le avec
    1 Mio
    de
    Flash
    interne mais
    320 Kio
    de
    RAM

Et bien grâce à et qui ont simplement envoyé la question à
Zero
, nous sommes aujourd'hui en mesure de te révéler les spécifications complètes de ce futur produit. :favorite:

Nous avions raison sur le microcontrôleur et bonne nouvelle c'est le
STM32F413
qui est utilisé, le meilleur des deux cas donc ! :bj:

Nous confirmons donc
1 Mio
de
Flash
interne au microcontrôleur, auquel s'ajoutent
4 Mio
de
Flash
sur puce externe pour un total de
5 Mio
.

Sur la
RAM
maintenant énorme surprise, car
TIny_Hacker
nous annonce
832 Kio
, nombre qui semble sortir de nulle part. :o
Pour comprendre décomposons un peu la chose : 832-320=512K.
L'explication en est alors simple, nous avons les
320 Kio
de
RAM
internes au microcontrôleur, auxquels s'ajoutent
512 Kio
de
RAM
sur puces externes pour un total enfin suffisant de
832 Kio
! :bj:

Et enfin, la batterie est une Lithium de type
LiPo
avec
2200 mAh
de capacité.

Bref si l'on adopte le point de vue d'une
TI-84 Plus CE
, la
Zero
en révolutionne clairement et indiscutablement le matériel avec des composants bien plus récents et très supérieurs.
Imagine ce que donneront tes programmes
TI-Basic
et peut-être même assembleur sur un tel matériel... ;)

Mais il est amusant de constater d'autre part la proximité entre les choix matériels pour la
Zero
et pour la
NumWorks N0100
de 2017. Il n'empêche que même de ce point de vue, la
Zero
en est également une amélioration très significative :
  • non pas
    1 Mio
    de mémoire
    Flash
    mais
    5 Mio
    soit 5 fois plus ! :bj:
  • non pas les ridicules
    256 Kio
    de mémoire
    RAM
    qui nous font cruellement souffrir en
    Python
    depuis des années mais
    832 Kio
    soit 3,25 fois plus ! :bj:
  • non pas
    1200 mAh
    de capacité pour la batterie mais
    2200 mAh
    soit plus de 1,8 fois plus ! :bj:
A quand des versions des
firmware
/ et application pour la
Zero
? ;)
Si jamais la
Zero
n'inclut pas officiellement d'application
Python
ce qui n'est pas annoncé à ce jour, ce serait l'occasion de pouvoir disposer enfin d'un
heap
Python
correctement dimensionné, au-delà des très insuffisants
32K
de la
NumWorks
qui nous font souffrir depuis des années, et des
19K
des
TI-84 Plus CE Python
et
TI-84 Plus CE-T Python Edition
avec lesquels on ne peut quasiment rien envisager de sérieux une fois les bibliothèques graphiques importées.

Espérons pouvoir prochainement te compléter cela de photos du matériel et affiner la chose d'un test logiciel. À bientôt on espère... ;)

Référence
:
Comparaison
Zero
avec
TI-84 Plus CE Python
et
NumWorks N0100


Source
:
roccolox programs
via

Crédits photos
:
TIFreak8x

NumWorks Khi: bootloader conforme France, multiboot Epsilon+KhiCAS

New postby critor » 07 Apr 2022, 10:25

La calculatrice
NumWorks
était initialement un formidable projet de machine ouverte.

Le développement tiers a pu s'y hisser à un niveau jamais atteint sur la concurrence, et permettant l'émergence d'un projet formidable,
Omega
par et ses non moins illustres collaborateurs.

Il s'agissait d'un
firmware
alternatif pour ta calculatrice
NumWorks
. Basé sur le code source d'
Epsilon
comme la licence libre l'y autorisait,
Omega
avait pour but de regrouper et mettre en avant les meilleures contributions au code d'
Epsilon
, en incluant cette fois-ci celles laissées de côté par le constructeur.

Difficile de tout citer ici mais voici déjà par exemple un des fantastiques ajouts d'
Omega
. La
NumWorks
travaille en interne sur des arbres de calcul, mais les bridait donc artificiellement pour n'accepter que des valeurs numériques.
Omega
ré-autorisait à nouveau ces arbres à utiliser des lettres / inconnues, ce qui nous redonnait ainsi un moteur de calcul littéral. De quoi même dériver, du jamais vu à seulement
80€
! :bj:
Citons aussi un tableau périodique des éléments, ou encore la possibilité d'avoir une bibliothèque de constantes physiques avec unités bien avant que ce ne soit disponible dans le
firmware
officiel.

12024Outre ce qu'il intégrait,
Omega
offrait également l'avantage de pouvoir installer à chaud des applications, fonctionnalité jusqu'alors absente du
firmware
officiel
Epsilon
. Plusieurs applications de très haute facture furent développées, on peut citer entre autres : :D
  • , une formidable application intégrée de Mathématiques et de Sciences par , enseignant-chercheur à l'Université de Grenoble, qui étendait gratuitement les capacités de ta calculatrice au niveau d'une
    HP Prime
    . L'application intégrait le moteur de calcul formel
    GIAC
    développé pour le logiciel
    Xcas
    du même auteur pour des possibilités en calcul encore plus étendues. Étaient également inclus un tableur, une bibliothèque de constantes physiques, un convertisseur d'unités, un tableau périodique des éléments et bien d'autres choses encore. Le tout était en prime programmable en
    Python
    , avec une collection de modules importables bien plus étoffée que celle de l'application
    Python
    officielle, et surtout ici de façon intégrée, tes scripts
    Python
    pouvant en effet faire appel au moteur de calcul formel
    GIAC
    par l'intermédiaire du module
    cas
    .
  • , un émulateur de console de jeux
    Nintendo NES
    par
  • , un émulateur de console de jeux
    Nintendo GameBoy
    par
  • , un tableau périodique des éléments par
Un gros avantage de plus était ici que
KhiCAS
et l'ensemble des fonctionnalités rajoutées restaient accessibles en mode examen, de façon parfaitement légale et légitime en France, puisque ces fonctionnalités ne sont pas des données et venaient de plus directement intégrées à des modèles concurrents haut de gamme parfaitement autorisés. :bj:
14500Mais voilà, à la rentrée 2021 la mise à jour d'
Epsilon
, le
firmware
officiel des calculatrices
NumWorks
, a introduit un verrouillage des modèles
N0110
.

Toute
N0110
mise à jour ou venant préchargée d'une version
16.3
ou supérieure, comprend un chargeur de démarrage censé être non effaçable, et empêchant entre autres :
  • l'installation de tout
    firmware
    non correctement signé par le constructeur, c'est-à-dire entre autres de tout
    firmware
    tiers
    (, , , ...)
  • l'installation d'applications persistantes en mémoire
    Flash
    (logiciel intégré de Mathématiques avec moteur ce calcul formel
    KhiCAS
    , émulateurs
    Nintendo Game Boy
    et
    NES
    , tableau périodique des éléments, ...)
Les utilisateurs informés avaient certes le choix mais étaient face à un cruel dilemme :
  • soit utiliser le
    firmware
    Epsilon
    pour bénéficier de toutes les dernières nouveautés officielles, mais en contrepartie renoncer définitivement aux
    firmwares
    tiers
  • soit utiliser un
    firmware
    tiers, mais en contrepartie renoncer aux nouveautés officielles car
    NumWorks
    a profité de l'occasion du verrouillage pour révoquer sa licence libre, et interdire ainsi la réutilisation de tout code introduit à partir de la version
    16

15413Dans une actualité précédente, nous t'annoncions la sortie de . est un chargeur de démarrage avec lequel il suffit d'écraser le chargeur officiel, grâce à une faille présente dans les
firmwares
Epsilon
officiels.

Après plus de 6 mois d'attente te permettait enfin de déverrouiller ta calculatrice, étant ensuite capable de lancer aussi bien les
firmwares
officiels
Epsilon
que les
firmware
tiers, à la seule condition que ces derniers aient été mis à jour pour supporter ce nouvel amorçage.
À ce jour étaient compatibles les
firmwares
et .

Encore mieux que ça, avec tu n'avais même pas à choisir entre fonctionnalités officielles et tierces, tu peux avoir les deux en même temps. Depuis le verrouillage la mémoire
Flash
des
N0110
est partitionnée en deux moitiés égales de
4 Mio
, et pouvant chacune accueillir un
firmware
.
Le raccourci
reset
+
4
permet de consulter l'état de la mémoire
Flash
et de mettre la calculatrice dans un mode de mise à jour protégé car interdisant la réécriture du chargeur de démarrage.
La mémoire
Flash
de
8 Mio
est découpé en 2
slots
A
et
B
de
4 Mio
chacun. Les raccourcis
reset
+
1
et
reset
+
2
te permettent alors de basculer entre l'amorçage des deux
firmwares
situés dans chacun de ces 2
slots
.

Sauf qu'il y avait 2 problèmes majeurs avec
Phi
.

D'une part, le découpage de la mémoire
Flash
en 2
slots
égaux de
4 Mio
faisait qu'il n'était pas possible de profiter à la fois :
  • de la possibilité d'avoir 2
    firmwares
    entre lesquels basculer au choix
    (par exemple l'une des dernières versions du firmware
    Epsilon
    pour avoir les dernières fonctionnalités officielles que la révocation de la licence libre interdit désormais de reprendre, accompagnée d'un des firmwares tiers ou )
  • et de la formidable application
    KhiCAS
Un problème de taille au sens propre, c'était ou l'un ou l'autre :
  • Soit tu mettais obligatoirement un
    firmware
    tiers dans le
    slot
    A
    ( ou )
    et pouvais alors installer et lancer l'application
    KhiCAS
    , mais cette dernière débordait sur le
    slot
    B
    et n'était donc pas compatible avec l'installation d'un 2ème
    firmware
    dans ce dernier
  • Soit tu mettais 2
    firmwares
    différents au choix dans les
    slots
    A
    et
    B
    , excluant ainsi l'installation de
    KhiCAS
    puisque le
    slot
    B
    lui était nécessaire
Des contraintes qui faisaient entre autres qu'il était impossible de disposer à la fois de l'application
KhiCAS
et des fonctionnalités d'une version récente du
firmware
officiel
Epsilon
.
Extrêmement dommage. :'(

D'autre part, et là c'était extrêmement grave,
Phi
n'est pas conforme à la réglementation française du mode examen et est donc strictement interdit d'utilisation à tout examen exigeant l'activation de ce mode en France. :#non#:
Le problème est que les raccourcis
reset
+
1
et
reset
+
2
permettant de basculer entre les deux
firmwares
présents en mémoire désactivent le mode examen.
Or c'est strictement interdit par les spécifications officielles du mode examen français ; le mode examen ne doit pas pouvoir être désactivé de façon autonome par les candidats, c'est-à-dire que la désactivation doit nécessiter un outil extérieur non présent sur leur table de composition car interdit en examen
(2ème calculatrice, ordinateur, etc.)
.
Un outil interdit étant frauduleux, si tu introduis
Phi
dans une salle d'examen en France et te fais prendre
(parce que tu auras basculé entre deux firmwares pendant l'épreuve et peut-être même oublié de réactiver immédiatement le mode examen)
, tu risquais l'ensemble des désagréments possiblement dramatiques
(non fixé sur ta réussite à l'examen à la veille de l'été comme les camarades et donc rien à fêter avec eux, le jugement nécessitant du temps alors qu'en prime les rectorats sont fermés une bonne partie de l'été risque de perdre ton inscription dans l'enseignement supérieur et donc une année, jusqu'à 5 ans d'interdiction de passer tout examen y compris le permis de conduire de quoi bien te gâcher la vie, ...)
.

Malgré sa gravité et ses conséquences éventuelles hautement désagréables, ce problème rapidement signalé n'a malheureusement pas fait l'objet de corrections de la part de l'équipe
Omega
. :'(

Heureusement, , auteur de l'application
KhiCAS
et de son
firmware
dédié , s'est saisi de ces problèmes.

Sa dernière mise à jour elle aussi majeure du
firmware
inclut désormais un chargeur de démarrage comparable à
Phi
, mais conforme à la réglementation du mode examen français.
Le mode examen si actif n'est plus désactivé lorsque tu bascules entre les
firmwares
via les raccourcis
reset
+
1
ou
reset
+
2
, plus aucun danger pour toi ! :bj:
Techniquement, le chargeur de démarrage lorsqu'on lui demande de changer de
firmware
récupère la configuration éventuelle du mode examen dans le
firmware
actif jusqu'alors, et la migre vers le nouveau
firmware
demandé.

15441Intéressons-nous maintenant à la nouvelle possibilité de
multiboot
enfin compatible avec l'utilisation de l'application
KhiCAS
. Le nouveau
bootloader
(chargeur de démarrage)
de découpe la mémoire
Flash
en 3
slots
, nommés ici
1
,
2
et
3
:
  • le
    slot
    1
    de
    3,5M
    correspond au début du
    slot
    A
    de
    Phi
  • le
    slot
    3
    de
    4M
    correspond exactement au
    slot
    B
    de
    Phi
  • le
    slot
    2
    de
    0,5M
    est un petit espace intermédiaire entre les deux

15437Et c'est cela qui change tout,
Bernard
a sorti une version minimaliste du
firmware
. Ne comprenant aucune application intégrée elle est dédiée au seul lancement des applications rajoutables dont
KhiCAS
entre autres.

Un avantage annexe de cette version minimaliste est qu'elle laisse bien davantage de
RAM
libre pour les applications,
176K
au lieu de
97K
! :D

Tu peux donc enfin obtenir à la fois les dernières fonctionnalités du
firmware
officiel
Epsilon
et l'application
KhiCAS
. Il te suffit :
  • d'installer
    Epsilon
    dans le
    slot
    1
  • d'installer la version minimaliste de dans le
    slot
    2
  • d'installer l'application
    KhiCAS
    qui ira donc dans le
    slot
    3
Un grand merci à
Bernard Parisse
pour s'être dépêché de développer et rendre disponible cette solution améliorée et conforme à temps pour les examens ! :favorite:

15441Supposons que tu dispose déjà d'une machine sous
Phi
ou
Omega 2.0
, voici comment migrer.

Pour remplacer
Phi
par le nouveau
bootloader
de , il te faut :
  1. mettre la machine en mode de récupération autorisant la réécriture du
    bootloader
    avec le raccourci
    reset
    +
    6
  2. te rendre sur le site de
  3. cliquer sur le bouton
    Récupération
    pour charger et lancer le logiciel de récupération
  4. installer le nouveau
    bootloader
    amélioré et conforme pour la France avec le bouton
    multi-boot

1544015441Prochaine étape, mettre
Epsilon
dans une version récente dans le
slot
1
. Une fois son fichier récupéré, il te faut :
  1. mettre la calculatrice en mode de mise à jour protégé avec le raccourci
    reset
    +
    4
  2. aller sur notre , indiquer le fichier
    Epsilon
    à programmer et utiliser le bouton
    Flash Slot A
Concernant le fichier
external.bin
d'
Epsilon 18
:
  • soit tu l'as déjà sous la main parce que tu as installé
    Phi
    sur une machine qui avait été mise à jour avec
    Epsilon 18.2.3
  • soit comme indiqué tu as déjà
    Epsilon 18
    sur la calculatrice dans le
    slot
    B
    ou
    3
    , et tu peux récupérer son fichier avec le même outil via le bouton
    Dump Slot B
  • soit il va te falloir te débrouiller pour le récupérer autrement, d'une façon illégale selon l'interprétation de la nouvelle licence
    (ou plus exactement de son absence)
    par
    NumWorks

1543815439Voilà, le plus dur est fait. Maintenant, toujours avec la calculatrice en mode de mise à jour protégé via
reset
+
4
, il te suffit :
  • d'installer la version minimaliste de avec le bouton
    Khi slot 2
  • d'installer les applis additionnelles dont
    KhiCAS
    avec le bouton de ton choix, soit
    KhiCAS stable
    soit
    KhiCAS alpha
Le contenu du
slot
3
affichera alors
Invalid
mais ne t'inquiète pas, c'est normal puisqu'il ne contiendra plus de
firmware
amorçable.

Tu disposes maintenant du meilleur des 2 mondes : :bj:
  • raccourci
    reset
    +
    1
    pour le
    firmware
    officiel
    Espilon
    avec ses dernières fonctionnalités
  • raccourci
    reset
    +
    2
    pour les applications additionnelles dont
    KhiCAS

Si par contre tu pars d'une calculatrice ne disposant pas encore de
Phi
, le plus simple est de commencer par l'installer pour ensuite suivre la procédure précédente de migration vers .

Tutoriels d'installation
:


Installation
:

  1. Phi
  2. ou
    Omega

Source
:
viewtopic.php?f=101&t=25584&p=267401#p267401

Casio Stage en ligne gratuit préparation BAC avril 2022 par Casio

New postby critor » 06 Apr 2022, 10:31

Bientôt l'épreuve écrite de spécialité Mathématiques du Baccalauréat Général, très rapidement après le retour des vacances suite à la nouvelle organisation imposée par la réforme du lycée et du Baccalauréat.
Il faut donc préparer cela dès maintenant, et avec les vacances et le beau temps printanier qui arrivent simultanément, cela va peut-être être difficile.

Mais que tu sois lycéen(ne) ou enseignant(e),
Casio
se propose de t'aider en t'accompagner avec un stage de préparation en ligne.

Entièrement gratuit, le stage adopte différents objectifs selon si tu es élève ou enseignant(e) :
  • pour les enseignants : comment aborder les différents thèmes mathématiques de manière simple et rapide à l’aide de la calculatrice
  • pour les élèves : se préparer avec l'aide d'un des professeurs de Mathématiques partenaires de
    Casio
    sur les principaux thèmes du programme, s'exercer avec des cas concrets issus des annales, et tu es bien évidemment bienvenu(e) peu importe ton équipement

Des journées ce mois d'avril vont être dédiées à chacun des thèmes, avec le déroulement suivant :
  • atelier pour les enseignants : 1 heure en fin de matinée, de
    10h30
    à
    11h30
  • atelier pour les élèves : 1 heure en tout début d'après-midi de
    13h30
    à
    14h30
    , afin de ne pas impacter ce que tu avais prévu pour ton après-midi

Afin de maximiser tes possibilités de participer, chaque thème sera de plus proposé sur 2 journées tombant sur différentes zones de vacances scolaires, du moins en Métropole. En voici le calendrier :
  • Fonctions & Probabilités
    :
    • Mardi 19 avril
      (zones A et B Métropole + Guyane + Saint-Martin + Saint-Barthélémy)
    • Mardi 26 avril
      (zones A et C Métropole + Guyane + Corse)
  • Programmation Python & Suites
    :
    • Jeudi 21 avril
      (zones A et B Métropole + Guyane + Saint-Martin + Saint-Barthélémy)
    • Jeudi 28 avril
      (zones A et C Métropole + Guyane + Corse)
  • Activation et désactivation du mode examen Casio
    :
    Mercredi 4 mai
Une organisation méticuleuse afin que tout-le-monde puisse participer, et que nous ne pouvons que féliciter ! :bj:

Le stage est sur inscription, mais précisons que tu n'as aucune obligation de suivre l'intégralité du stage : tu as toute liberté de sélectionner les journées auxquelles tu souhaites participer, même une seule si tu le veux ! :D

Merci
Casio
! :favorite:


Inscription
:
élèves enseignants

Casio OutRun 1.0RC, sortie jeu arcade Sega adapté Graph 90+E

New postby critor » 05 Apr 2022, 10:29

Nombre de jeux sortant pour smartphones, tablettes, ordinateurs et consoles de jeux, se retrouvent plusieurs années plus tard disponibles sur calculatrices graphiques.

Justement, un énorme avantage jusqu'à présent des calculatrices graphiques
Casio
, le constructeur ne combat pas l'exécution d'application tierces lorsque la calculatrice n'est pas en mode examen. Un choix de la raison à l'exact opposé de l'ensemble de la concurrence qui pousse pour l'excessif avec le blocage, l'effacement ou parfois même les deux, de tout programme ou application faisant appel à du code machine tiers, parfois même hors mode examen.

Les formidables
Casio Graph 90+E
(ou
fx-CG50
à l'international)
, ainsi que les modèles les ayant précédés
fx-CG10
et
fx-CG20
, grâce aux émulateurs dédiés et par , te permettent de jouer directement aux jeux compatibles avec les consoles de jeux suivantes :
  • Nintendo Famicom
    (
    1983
    )
  • Nintendo NES
    (
    1985
    )
  • Nintendo Game Boy
    (
    1989
    )
  • Nintendo Game Boy Color
    (
    1998
    )
8198831412255


Pour les consoles de jeux et plus généralement plateformes ne disposant pas encore d'un émulateur dédié sur ta
Casio
, les jeux doivent être adaptés au cas par cas. L'on n'en compte pas moins diverses adaptations ou portages hautement réussis de jeux sortis pour d'autres plateformes. On peut citer entre autres :
1189112784144371445415176

Les
Casio Graph 90+E
et compatibles sont de formidables machines vidéoludiques, aussi bien pour les joueurs que les développeurs, de loin le meilleur choix à ce jour toute concurrence confondue ! :bj:

Parlons aujourd'hui d'un tout autre jeu.
OutRun
est un jeu de course en
3D
sorti initialement sur borne d'arcade par Sega en 1986.

Au départ de
Coconut Beach
au volant de ta
Ferrari Testarossa
décapotable et accompagné de ta copine, tu devais enchaîner avec succès 5 circuits. L'épopée te faisait sillonner l'Europe avec sa haute variété de paysages et reliefs. À chaque fin de course tu avais le choix entre deux destinations possibles avec des conséquences sur la fin du jeu.

6774En 2016
OutRun
avait fait l'objet d'une première adaptation sur calculatrices graphiques par
Mark Power
sous le nom de
Racer
, pour la regrettée
HP Prime
.

Le jeu avait ici été recodé intégralement dans le langage interprété de la machine, le
HPPPL
.

Malgré cela ainsi que le recodage intégral, le lien avec l'original n'en restait pas moins évident vu la réutilisation des
sprites
de
Sega
.

9617En 2018, nous avons eu droit cette fois-ci à un portage de
Cannonball
pour
TI-Nspire
par en langage compilé
C
.

Cannonball
est un moteur de jeu amélioré dédié au jeu
OutRun
. Nécessitant ici la
ROM
du jeu original, il te permettait d'en retrouver toutes les fonctionnalités.

1534015336Dans deux articles précédents nous suivions ensemble dans son développement d'une adaptation de
OutRun
pour calculatrices
Casio Graph 90+E
et
fx-CG50
, ainsi que leurs modèles prédécesseurs
fx-CG10
et
fx-CG20
.

Après nombre de péripéties,
OutRun
atteint enfin ajourd'hui la version
1.0RC
, candidate à la version finale ! :bj:

1542315422
OutRun
t'accueille donc avec un écran aux graphismes dignes de ce nom pour un jeu d'un tel acabit.

Au-delà tu as droit à un menu bien fourni.

1542515424Nombre de réglages te sont en effet accessibles :
  • choix du nombre de voitures adverses
    (50, 100, 200, 300)
  • 3 niveaux de difficulté progressive, car ce sont autant de véritables IA que tu vas devoir affronter :
    • easy
      : les adversaires roulent tous à la même vitesse et ne changent pas de file
    • normal
      : les opposants ont chacun leur vitesse propre et peuvent se doubler si une voiture plus lente leur obstrue le passage
      (par la gauche si possible, ou sinon par défaut par la droite)
    • hard
      : les ennemis peuvent changer de file aléatoirement quand bon leur semble
  • possibilité de spécifier un nom de 3 lettres que tu souhaites afficher sur la plaque arrière de ta voiture, le réglage s'effectuant de façon délicieusement
    rétro
    en faisant défiler chaque lettre à l'aide des flèches directionnelles, comme si tu étais sur une borne d'arcade du siècle dernier :favorite:
  • possibilité de désactiver des éléments graphiques
    (environnement, nuages, fond d'écran)
    ou de
    gameplay
    (voitures adverses)
  • possibilité d'afficher les performances du jeu en
    fps
    (nombre de rafraîchissements d'écrans par seconde)

Il est maintenant grand temps de lancer la partie. 2 modes de jeu te sont au choix :
  • le mode
    arcade
    vise à terminer la course dans le temps imparti, chaque passage à un
    checkpoint
    rechargeant plus ou moins généreusement le temps selon la difficulté
  • le mode
    time attack
    est sans opposants et vise à faire le meilleur temps sur chacun des circuits. Un
    hall of fame (tableau d'honneur)
    donne les 5 meilleurs temps pour chaque circuit, et tu devras ajuster tes trajectoires avec minutie

Le moteur physique n'est en effet pas en reste :
  • la piste peut présenter des virages à gauche ou à droite, où tu devras choisir judicieusement ta position ainsi que ta vitesse afin que la force centrifuge ne t'envoie pas dans le décor
  • la piste peut présenter des tronçons en montée ou en descente, avec bien évidemment un effet sur la vitesse maximale atteignable

C'est maintenant enfin le moment de choisir ton circuit. 2 types de circuit sont possibles :
  • circuit simple où il te suffit juste de rejoindre la ligne d'arrivée
  • circuit
    multilap
    prenant la forme d'une boucle sur laquelle tu devras enchaîner 3 tours

15426Pour un total de 10 choix possibles, ces 2 circuits te sont chacun proposés dans 5 environnements couvrant cette fois-ci non plus l'Europe, mais bel et bien une bonne moitié du globe :
  • European Plains
    : Plaines européennes
  • Atacama Desert
    : Désert d'Atacama en Amérique du Sud
  • US Road 66
    : Route 66 aux Etats-Unis en Amérique du Nord
  • Finland
    : L'hiver finlandais en Europe du Nord
  • Kenyan Savanah
    : Savane kenyane en Afrique de l'Est

Pour chacun, un écran de lancement te rappelera les règles du circuit choisi, ainsi que les contraintes physiques éventuelles de l'environnement :
1542715428154291543015431
1543215433154341543515436


Comme tu peux le voir, les graphismes 3D ont fait l'objet d'un soin absolument méticuleux : :favorite:
  • éléments 3D de bord de route, que ce soit des décorations
    (espèces d'arbres, cactus, herbes, ...)
    ou des panneaux indicateurs
    (imminence d'un virage à gauche ou droite ou encore d'une section en montée ou descente, arrivée, ...)
  • système de fond d'écran sur 3 plans : le ciel avec les nuages qui défilent, et devant lequel s'interposent jusqu'à 2 niveaux d'horizon animés en parallaxe lors des virages

Les performances ne sont pas en reste : sans aucun
overclocking
les
fps
oscillent dans la fourchette 20-25 pour une fluidité remarquable malgré la richesse de l'affichage, rendant honneur aux hautes possibilités du matériel
Casio Graph 90+E
et
fx-CG50
! :bj:

C'est un véritable chef d'œuvre du jeu vidéo que nous signe aujourd'hui sur
Casio Graph 90+E
et
fx-CG50
; espérons que cela donnera envie à d'autres créateurs de s'intéresser à ces formidables petites machines ! ;)

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

Source
:
viewtopic.php?f=24&t=25536&start=10#p267367

NumWorks Coque NumWorks édition limitée Avril 2022 à gagner

New postby critor » 04 Apr 2022, 15:45

13036Depuis la rentrée 2020,
NumWorks
te sort chaque fois une coque
collector
en édition limitée pour ta calculatrice. Si tu es chanceux(se) et a su te montrer assidu(e), alors tu devrais avoir pu te constituer une formidable collection : :D
1323013229 14802 135731480014799 14801

Voici pour ce mois d'
Avril 2022
la toute dernière édition limitée de la coque
NumWorks
à ajouter à ta collection. C'est cette fois-ci l'homme idéal de Vitruve qui s'invite sur ta calculatrice.

Tu peux dès maintenant tenter de gagner la coque sur les différents comptes sociaux du constructeur :

Pour participer et peut-être gagner, c'est très simple. À partir des liens précédents, et d'ici le
30 avril
au plus tard, il te suffit de :
  1. suivre, aimer ou t'abonner au compte du constructeur
  2. taguer ou identifier 2 ami(e)s

N'hésite pas à participer sur les différents comptes sociaux associés à ta zone géographique afin de maximiser tes chances. ;)

-
Search
-
Social
-
Featured topics
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 5€. Même non fonctionnelle ou ancien modèle. Etiquette de retour fournie, pas de frais de port à payer.
Coque NumWorks édition limitée Mai 2022 à gagner.
Comparaisons des meilleurs prix pour acheter sa calculatrice !
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
368 utilisateurs:
>342 invités
>20 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)