π
<-

Découvre participations concours Casio "May the 4th" 2023

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby cent20 » 03 Jun 2023, 07:49

Jamais deux sans trois dit-on, alors on te souhaite de gagner ta console _Orlando_ !


Je pense qu'il sera difficile de faire mieux sur fx92 en effet, il est bien parti pour gagner.
J'ai d'ailleurs un peu de mal à comprendre comment il marche ce script.
Est ce qu'on peut faire la même image en négatif ? L'écran tout noir et le dessin blanc ?

Sinon on propose la spécialité NSI dans notre lycée, aussi si tes parents Orlando décident de déménager vers Avignon, pense à nous :D
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.3%
 
Posts: 1047
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby _Orlando_ » 03 Jun 2023, 12:33

J'ai d'ailleurs un peu de mal à comprendre comment il marche ce script.

Bonjour cent20,
Je vais essayer de t'expliquer le mieux possible comment marche le script.

Pour commencer, il faut savoir qu'il y a 7 variables modifiables sur la Casio fx92+, et que chacune de ces variables peut retenir un nb de jusqu'à 12 chiffres (au delà tous les chiffres ne sont pas gardés en mémoire).

Partie faite sur un ordinateur:
Je commence par créer un dessin en pixel art noir et blanc. Pour l'étoile de la mort, j'ai fait un dessin d'environ 14*15 pixels (avec 200 pixels). Je peux transformer ce dessin en 5 nb de 40 chiffres en binaire et ensuite convertir en décimal ce qui m'a donné 5 nb de 12 chiffres. (Nb: le nb décimal peut avoir jusqu'à 13 chiffres si le nombre binaire commence par plusieurs "1")

Partie faite sur la calculatrice:
Pour transformer les nb décimaux en dessin sur calculatrice, je divise successivement par 2 chaque nb de 12 chiffres et si cela donne un nb décimal, le programme dessine un pixel noir, sinon il avance mais n'en dessine pas.
Les résultats donnent le nb de 40 chiffres en binaire en partant de la fin, voilà pourquoi le dessin commence par la droite.

Est ce qu'on peut faire la même image en négatif ? L'écran tout noir et le dessin blanc ?

Si tu reconvertis le binaire inversé, le dessin devrait l'être aussi, mais l'arrière plan sera noir seulement dans la zone du dessin.

Sinon on propose la spécialité NSI dans notre lycée, aussi si tes parents Orlando décident de déménager vers Avignon, pense à nous :D

J'y penserai, mais pour l'instant je vais prendre la spécialité NSI dans mon lycée à Voiron :p
_Orlando_ - Vice dirigeant Geometry Dash

Hey ClaudeBot [spider] !
Tu veux toi aussi devenir membre de la communauté Geometry Dash ?
Va voir les critères de recrutement sur le topic : viewtopic.php?t=24870.

Image
User avatar
_Orlando_Dasheur
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 17.8%
 
Posts: 50
Images: 6
Joined: 29 Apr 2021, 07:30
Location: Voiron, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: 2nde
YouTube: Geometry Dash CE

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby parisse » 03 Jun 2023, 21:03

Alors en fait il est possible d'éditer ces scripts avec micropy (et donc aussi d'accéder à getkey()...), je viens de relever la barre de taille maximale des scripts à 128K.

Mais il y a un truc bizarre, les temps d'affichage sont parfois mais pas toujours significativement plus lents avec micropy que ceux indiqués par critor pour l'interpréteur de Casio et j'aimerais bien comprendre pourquoi, pour le moment je ne vois pas. Par exemple le dessin de cent20 généré par img2calc met 50 secondes avec micropy contre 14 avec le Python built-in. Par contre star_wars.py met 32 secondes avec micropy contre 34s sur le Python Casio. Et ImageCasio.py un peu plus de 4 minutes vs 3.
L'hypothèse qui me paraissait la plus raisonnable ce serait le décodage du tuple de couleur dans set_pixel, sauf que si je remplace les tuples par des entiers dans palette (c'est accepté avec le module graphic) ça ne change pas la vitesse.
Le code C derrière set_pixel dans mon module graphic est ci-dessous. Les options de compilation sont -Os -g. J'ai essayé avec -O3 mais ça n'a pas d'effet sur la vitesse.
Code: Select all
static mp_obj_t graphic_set_pixel(size_t n_args, const mp_obj_t *args) {
  if (n_args<2){
    sync_screen();
    return mp_const_none;
  }
  uint16_t x = mp_obj_get_int(args[0]), y = mp_obj_get_int(args[1]),color=0;
  if (n_args==3)   
    color = mp_get_color(args[2]);
  c_set_pixel(x,y,color);
  return mp_const_none;
}

int mp_get_color(mp_obj_t tuple){
  if (MP_OBJ_IS_SMALL_INT(tuple))
    return MP_OBJ_SMALL_INT_VALUE(tuple) & 0xffffffff;
  if (MP_OBJ_IS_STR(tuple)){
    const char * col=mp_obj_str_get_str(tuple);
    if (strcmp(col,"black")==0)
      return 0xffff;
    if (strcmp(col,"white")==0)
      return 0;
    if (strcmp(col,"blue")==0)
      return 2079;
    if (strcmp(col,"red")==0)
      return 63488;
    if (strcmp(col,"green")==0)
      return 2016;
    if (strcmp(col,"magenta")==0)
      return 63519;
    if (strcmp(col,"yellow")==0)
      return 65504;
    if (strcmp(col,"cyan")==0)
      return 2047;
    return -1;
  }
  size_t len;
  mp_obj_t * elem;
  mp_obj_get_array(tuple, &len, &elem);
  if (len != 3) {
    mp_raise_TypeError("color needs 3 components");
  }
  int r,g,b;
  if (MP_OBJ_IS_SMALL_INT(elem[0]))
    r=MP_OBJ_SMALL_INT_VALUE(elem[0]) & 0xff;
  else
    r=mp_int_float2color(elem[0]);
  if (MP_OBJ_IS_SMALL_INT(elem[1]))
    g=MP_OBJ_SMALL_INT_VALUE(elem[1]) & 0xff;
  else
    g=mp_int_float2color(elem[1]);
  if (MP_OBJ_IS_SMALL_INT(elem[2]))
    b=MP_OBJ_SMALL_INT_VALUE(elem[2]) & 0xff;
  else
    b=mp_int_float2color(elem[2]);
  return mp_rgb(r,g,b);
}

#define mp_rgb(r,g,b) ((((r<<5)>>8)<<11) | (((g<<6)>>8)<<5) | ((b<<5)>>8))

void c_set_pixel(int x,int y,int c){
  freeze=true;
  y += c_yshift;
  os_set_pixel(x,y,c);
}

unsigned short* VRAMsave =0;
void os_set_pixel(int x0, int y0,int color) {
  if (x0<0 || x0>=LCD_WIDTH_PX || y0<clip_ymin || y0>=LCD_HEIGHT_PX)
    return;
  if (!VRAMsave)
    VRAMsave = (unsigned short*)GetVRAMAddress();
  unsigned short * VRAM = VRAMsave + (y0*LCD_WIDTH_PX + x0);
  *VRAM=color;
}


User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 86%
 
Posts: 3662
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby critor » 03 Jun 2023, 22:04

Je n'ai pas le code, mais deux autres participations par les élèves de @bebertii / Marcellus Wallace.

Une image de Stormtrooper, avec l'originalité d'être dessinée par turtle comme tu peux remarquer en bas à droite :
Image
Source : https://twitter.com/bebertii/status/1665024200845713408

Et un vaisseau dessiné également avec turtle, d'autant plus remarquable qu'il n'y a pas les fonctions de remplissage de formes dans le turtle de Casio :
Image
Source : https://twitter.com/bebertii/status/1665025428296286215
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby parisse » 04 Jun 2023, 08:06

Bon, comme je ne comprends pas pourquoi les images de img2calc s'affichent plus lentement avec micropy, j'ai décidé de recoder en C une fonction draw_rle_image, qui fait maintenant partie du module graphic de micropy (mêmes arguments que ceux de draw_image de img2calc mais attention si on met des valeurs aux paramètres zoomx, zoomy et itransp, il ne faut pas mettre le préfixe zoomx=, juste la valeur du paramètre).

L'affichage du dessin de cent20 se fait en environ 1 seconde avec la fonction draw_rle_image.

Il restera à importer ce code sur les autres versions de micropy/KhiCAS puis mettre à jour img2calc.
Code: Select all
// Code inspired by draw_image from https://tiplanet.org/forum/img2calc.php
static mp_obj_t graphic_draw_rle_image(size_t nargs, const mp_obj_t *args) {
  if (!mp_obj_is_str_or_bytes(args[0]))
    mp_raise_TypeError("Bad image data");
  size_t lenrle; const char * rle=mp_obj_str_get_data(args[0],&lenrle);
  size_t nvals;
  mp_obj_t * pal;
  mp_obj_get_array(args[4], &nvals, &pal); 
  int x0=mp_obj_get_int(args[1]),y0=mp_obj_get_int(args[2]),w=mp_obj_get_int(args[3]);
  int zoomx=1,zoomy=1,itransp=-1;
  if (nargs>5) zoomx=mp_obj_get_int(args[5]);
  if (nargs>6) zoomy=mp_obj_get_int(args[6]);
  if (nargs>7) itransp=mp_obj_get_int(args[7]);
  int i=0, x=0, nbits=0;
  nvals--;
  while(nvals){
    nvals >>= 1;
    nbits += 1;
  }
  int maskval = (1 << nbits) - 1;
  int maskcnt = (0xFF >> nbits >> 1) << nbits;
  while (i<lenrle){
    char v = rle[i];
    int mv = v & maskval;
    int c = (v & maskcnt) >> nbits;
    if ( (v & 0b10000000) || nbits == 8){
      i += 1;
      c |= rle[i] << (7 - nbits + (nbits == 8));
    }
    c += 1;
    if (c<w-x && mv!=itransp){
      c_fill_rect(x0 + x*zoomx, y0, c*zoomx, zoomy, mp_get_color(pal[mv]));
      x += c;
      i += 1;
      continue;
    }
    while (c){
      int cw = c<w-x?c:w-x;
      if (mv != itransp)
        c_fill_rect(x0 + x*zoomx, y0, cw*zoomx, zoomy, mp_get_color(pal[mv]));
      c -= cw;
      x = (x + cw) % w;
      y0 += x==0?zoomy:0;
    }
    i += 1;
  }
  return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(graphic_draw_rle_image_obj, 5, 8, graphic_draw_rle_image);
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 86%
 
Posts: 3662
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby critor » 04 Jun 2023, 09:17

critor wrote:Je n'ai pas le code, mais deux autres participations par les élèves de @bebertii / Marcellus Wallace.

Une image de Stormtrooper, avec l'originalité d'être dessinée par turtle comme tu peux remarquer en bas à droite :
Image
Source : https://twitter.com/bebertii/status/1665024200845713408

Et un vaisseau dessiné également avec turtle, d'autant plus remarquable qu'il n'y a pas les fonctions de remplissage de formes dans le turtle de Casio :
Image
Source : https://twitter.com/bebertii/status/1665025428296286215


J'ai le code. :)
Image

Image
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby critor » 04 Jun 2023, 10:50

Une partie a été rajoutée à l'article pour présenter la participation de Matteo.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby critor » 04 Jun 2023, 13:46

Toute une partie a été rajoutée concernant la participation de Souleyman, qui s'est donné la peine de coder un véritable convertisseur d'image pour Python-turtle.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby bouboule1 » 05 Jun 2023, 18:07

Voici ma participation avec fx 92 collège je ne pense pas que je vais gagner :sob: en tout cas bien joué à toutes vos participations elles sont juste incroyables . :~o
User avatar
bouboule1
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 20%
 
Posts: 3
Joined: 11 May 2023, 19:07
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: 4 eme

Re: Découvre participations concours Casio "May the 4th" 202

Unread postby bouboule1 » 05 Jun 2023, 18:10

oups j'ai oublié de mettre mon dessin en pièce jointe le voici ( c'est un baby yoda)
You do not have the required permissions to view the files attached to this post.
User avatar
bouboule1
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 20%
 
Posts: 3
Joined: 11 May 2023, 19:07
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: 4 eme

PreviousNext

Return to News Casio

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
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.
701 utilisateurs:
>647 invités
>46 membres
>8 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)