Même si tu ne peux pas participer, j'aimerai savoir comment tu aurais fait pour le dessiner.
Tu l'aurais fait bêtement comme moi ou comme les premiers du classement ?
Concours de rentrée 2019 - défi de tracé
Re: Concours de rentrée 2019 - défi de tracé
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici.
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
-
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 283
- Images: 20
- Joined: 25 Oct 2018, 17:41
- Location: Chez moi
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Classe comme jamais.
- GitHub: Larwive
Re: Concours de rentrée 2019 - défi de tracé
Le suspens n'arrête pas de grandir.
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici.
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
-
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 283
- Images: 20
- Joined: 25 Oct 2018, 17:41
- Location: Chez moi
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Classe comme jamais.
- GitHub: Larwive
Re: Concours de rentrée 2019 - défi de tracé
Je vais vous détailler la meilleure de mes participations (j'étais le participant 15).
Mais parlons d'abord de quelques astuces:
Afin d'éviter les tests du genre "Si...Alors...Fin" qui prennent plusieurs lignes (ou qu'on ne peut parfois pas utiliser car au sein de 3 boucles imbriquées), l'idéal aurait été de pouvoir insérer des tests directement dans les calculs, comme par exemple...
La fx-92+SC ne le permettant pas, j'ai rusé en utilisant Ent(cos(
En effet, grâce à cos(0)=1 , la valeur entière de cos(B-7) sera égale à 1 si B=7 , ou à 0 si B≠7
L'exemple précedent devient donc ...
Autre astuce d'optimisation : parfois on a besoin de ne modifier que la variable x ou y.
Alors, en fonction de l'orientation actuelle du stylo, un simple "Avancer de ... pixels" suffit (prends moins d'octets qu'un "Aller à x=... ; y=..."
Et quand on est vraiment obligé d'utiliser "Aller à x=... ; y=..." , on peut mettre un "x=x" ou "y=y"
pour la variable qui ne "bouge" pas
Intéressante aussi cette variable d'orientation Θ dont la valeur sera retranchée de 360 (autant de fois que nécessaire) dès qu'elle dépasse 359 .
Θ est donc une variable modulo 360
C'est bon à savoir car, bien utilisée, ça nous évitera de la (re)paramétrer
A noter que cette variable n'est accessible qu'au moyen de la touche OPTN .
Parfois, on peut aussi optimiser au niveau des "Stylo écrit" / "Stylo relevé" : l'idéal étant, bien sûr, de tracer le plus possible sans "relever"
Au sujet des boucles, "Répéter jusqu'à...." n'est pas toujours indispensable.
Quand on sait déjà combien de fois la boucle doit "tourner", un simple "Répéter ..." suffit
Au sujet des données, on n'a -à ma connaissance- pas d'autre choix que de stocker ça dans des variables, par exemple en base 2...10 ou autres..., et d'y "réinjecter" d'autres valeurs au fur-et-à-mesure, au coeur de la/des boucle(s)...
Voilà pour les quelques astuces, maintenant passons au programme.
(Merci @Lephe pour l'animation )
Ca commence par la routine traçant les 3 espèces de rectangles :
Là, j'ai pensé ça comme un pointeur qui va, tout au long du tracé, tourner à chaque fois, à 90° dans le sens inverse des aiguilles d'une montre.
Il me restait alors à définir le meilleur point de départ, insérer les longueurs respectives de tracé dans la variable A (en base 10)
Ainsi, ça démarre avec un tracé de longueur 3, puis 5...2...3...Etc (d'où 54843253→A )
Parfois le stylo fait du "sur place" pour, par exemple, faire un demi-tour (donc tracé de longueur 0 )
Et comme on n'a pas assez de place pour inclure d'un coup toutes les longueurs dans A...
A+50(2031Ent(cos(A))+313064Ent(cos(,1-A→A réinjecte des données au fur-et-à-mesure...
(factorisation pour grapiller 1 ou 2 octets )
Puis, l'affichage du bonhomme :
J'ai pensé ça en affichage successif de "bandes verticales de 16 pixels", chacune codée en base 2 (en binaire, quoi)
Il y a , au total, 15 bandes réelles car certaines, vers la fin, sont vierges (par souci d'optimisation, les 14 premières sont codées par groupes de 2, donc 7 valeurs de 32bits)
Comme vous pouvez le constater, on réinjecte des données suivant la position actuelle du pointeur (bref, en fonction de l'abscisse x)
Les 2 pixels flottants font partie de la toute dernière bande verticale , celle-ci apparaît en abscisse x=52 après quelques bandes "vierges". Codée en binaire, elle vaut 12...d'où 12Ent(cos(x-52))
J'utilise la variable Θ comme valeur offset pour l'ordonnée y et lorsqu'on n'a pas de pixel à tracer, l'affichage se fait hors-écran.
Lorsque ,5Ent(A→A décode en base 2, A-Ent(A nous donne la valeur 0,5 si pixel, sinon 0
On gère le hors-écran grâce au fait qu' Arcsin(0)=0 et Arcsin(0.5)=30 ... Arcsin(A-Ent(A est préférable à 30(A-Ent(A
Ensuite , l'affichage des zig-zags :
un petit "Ent(10sin..." me permet, une fois arrivé à la longueur de 6, de ne pas la dépasser
J'utilise une valeur négative rien que pour ultérieurement réutiliser cette variable A=-6
Puis, l'affichage de l'épée :
(Dans un premier temps, j'avais opté pour un affichage en mode "sprite" , et de manière symétrique par souci d'économie de donnée)
Maintenant, c'est au tour des 2 cercles :
Ensuite, l'affichage de "2019" :
Encore pour réduire la taille des données, cette fois-ci , on code le tout en inversion video (si pixel il y a , valeur 0).
Et pour terminer, l'affichage du vaisseau suivi de l'espèce de coeur:
Cette fois, j'utilise Arctan au lieu d'Arcsin, uniquement par rapport à la variable D préalablement définie.
Voili-voilà ! J'espère avoir été assez clair dans mes explications, si vous souhaitez des détails sur telle ou telle partie, n'hésitez pas à poster
Et surtout...Longue vie à la fx-92+ Spéciale Collège !!
(hmmmm je sais : c'est juste une question de pile, haha )
PS: Voici le programme dans sa version complète: http://wes.casio.com/math/index.php?q=I ... 03F901F902
Mais parlons d'abord de quelques astuces:
Afin d'éviter les tests du genre "Si...Alors...Fin" qui prennent plusieurs lignes (ou qu'on ne peut parfois pas utiliser car au sein de 3 boucles imbriquées), l'idéal aurait été de pouvoir insérer des tests directement dans les calculs, comme par exemple...
- Code: Select all
A+(B=7)→C
La fx-92+SC ne le permettant pas, j'ai rusé en utilisant Ent(cos(
En effet, grâce à cos(0)=1 , la valeur entière de cos(B-7) sera égale à 1 si B=7 , ou à 0 si B≠7
L'exemple précedent devient donc ...
- Code: Select all
A+Ent(cos(B-7→C
Autre astuce d'optimisation : parfois on a besoin de ne modifier que la variable x ou y.
Alors, en fonction de l'orientation actuelle du stylo, un simple "Avancer de ... pixels" suffit (prends moins d'octets qu'un "Aller à x=... ; y=..."
Et quand on est vraiment obligé d'utiliser "Aller à x=... ; y=..." , on peut mettre un "x=x" ou "y=y"
pour la variable qui ne "bouge" pas
Intéressante aussi cette variable d'orientation Θ dont la valeur sera retranchée de 360 (autant de fois que nécessaire) dès qu'elle dépasse 359 .
Θ est donc une variable modulo 360
C'est bon à savoir car, bien utilisée, ça nous évitera de la (re)paramétrer
A noter que cette variable n'est accessible qu'au moyen de la touche OPTN .
Parfois, on peut aussi optimiser au niveau des "Stylo écrit" / "Stylo relevé" : l'idéal étant, bien sûr, de tracer le plus possible sans "relever"
Au sujet des boucles, "Répéter jusqu'à...." n'est pas toujours indispensable.
Quand on sait déjà combien de fois la boucle doit "tourner", un simple "Répéter ..." suffit
Au sujet des données, on n'a -à ma connaissance- pas d'autre choix que de stocker ça dans des variables, par exemple en base 2...10 ou autres..., et d'y "réinjecter" d'autres valeurs au fur-et-à-mesure, au coeur de la/des boucle(s)...
Voilà pour les quelques astuces, maintenant passons au programme.
(Merci @Lephe pour l'animation )
Ca commence par la routine traçant les 3 espèces de rectangles :
- Code: Select all
Aller à x=4; y=17
44→D
54843253→A
Stylo écrit
Répéter 24
Tourner de ↺90 degrés
,1Ent(A→A
Avancer de 10(A-Ent(A pixels
A+50(2031Ent(cos(A))+313064Ent(cos(,1-A→A
⤴
Stylo relevé
Là, j'ai pensé ça comme un pointeur qui va, tout au long du tracé, tourner à chaque fois, à 90° dans le sens inverse des aiguilles d'une montre.
Il me restait alors à définir le meilleur point de départ, insérer les longueurs respectives de tracé dans la variable A (en base 10)
Ainsi, ça démarre avec un tracé de longueur 3, puis 5...2...3...Etc (d'où 54843253→A )
Parfois le stylo fait du "sur place" pour, par exemple, faire un demi-tour (donc tracé de longueur 0 )
Et comme on n'a pas assez de place pour inclure d'un coup toutes les longueurs dans A...
A+50(2031Ent(cos(A))+313064Ent(cos(,1-A→A réinjecte des données au fur-et-à-mesure...
(factorisation pour grapiller 1 ou 2 octets )
Puis, l'affichage du bonhomme :
J'ai pensé ça en affichage successif de "bandes verticales de 16 pixels", chacune codée en base 2 (en binaire, quoi)
Il y a , au total, 15 bandes réelles car certaines, vers la fin, sont vierges (par souci d'optimisation, les 14 premières sont codées par groupes de 2, donc 7 valeurs de 32bits)
- Code: Select all
Avancer de 30 pixels
655364x→A
Répéter 21
Répéter 16
,5Ent(A→A
Aller à x=x; y=52-2θ÷45-Arcsin(A-Ent(A
Stylo écrit
Avancer de 0 pixels
Stylo relevé
Tourner de ↺ 22,5 degrés
⤴
Avancer de 1 pixels
A+12Ent(cos(x-52))+3301008851Ent(cos(x-38))+4258383057Ent(cos(x-40→A
A+2453574741Ent(cos(x-42))+1081671044Ent(cos(x-D→A
A+797186680Ent(cos(x-34))+878062140Ent(cos(x-36→A
⤴
Comme vous pouvez le constater, on réinjecte des données suivant la position actuelle du pointeur (bref, en fonction de l'abscisse x)
Les 2 pixels flottants font partie de la toute dernière bande verticale , celle-ci apparaît en abscisse x=52 après quelques bandes "vierges". Codée en binaire, elle vaut 12...d'où 12Ent(cos(x-52))
J'utilise la variable Θ comme valeur offset pour l'ordonnée y et lorsqu'on n'a pas de pixel à tracer, l'affichage se fait hors-écran.
Lorsque ,5Ent(A→A décode en base 2, A-Ent(A nous donne la valeur 0,5 si pixel, sinon 0
On gère le hors-écran grâce au fait qu' Arcsin(0)=0 et Arcsin(0.5)=30 ... Arcsin(A-Ent(A est préférable à 30(A-Ent(A
Ensuite , l'affichage des zig-zags :
- Code: Select all
Aller à x=x; y=22
Répéter 8
Aller à x=16; y=y+A
A-1-Ent(10sin(A→A
Stylo écrit
Avancer de-Apixels
⤴
un petit "Ent(10sin..." me permet, une fois arrivé à la longueur de 6, de ne pas la dépasser
J'utilise une valeur négative rien que pour ultérieurement réutiliser cette variable A=-6
Puis, l'affichage de l'épée :
- Code: Select all
Aller à x=D; y=8
Stylo écrit
Aller à x=45; y=5
Aller à x=42; y=7
Aller à x=41; y=2
Avancer de 5 pixels
Aller à x=x; y=4
Aller à x=45; y=1
Aller à x=x; y=A
Aller à x=D; y=-7
Aller à x=42; y=A
Aller à x=x; y=1
Stylo relevé
(Dans un premier temps, j'avais opté pour un affichage en mode "sprite" , et de manière symétrique par souci d'économie de donnée)
Maintenant, c'est au tour des 2 cercles :
- Code: Select all
4,5→A
Répéter 2
Répéter 45
Tourner de ↺ 8 degrés
Aller à x=,5+Acos(θ; y=,5+Asin(θ
Stylo écrit
⤴
Stylo relevé
6,35→A
⤴
Ensuite, l'affichage de "2019" :
- Code: Select all
5642465600→A
Aller à x=x; y=2
Répéter 5
Aller à x=20π; y=y-1
Répéter 12
,5Ent(A→A
Si A=Ent(A Alors
Stylo écrit
Avancer de 0 pixels
Stylo relevé
Fin
Avancer de 4 ÷3 pixels
⤴
A+16779094Ent(cos(A→A
⤴
Encore pour réduire la taille des données, cette fois-ci , on code le tout en inversion video (si pixel il y a , valeur 0).
Et pour terminer, l'affichage du vaisseau suivi de l'espèce de coeur:
- Code: Select all
81923201→A
Répéter 12
Aller à x=70; y=y
Répéter 9
,5Ent(A→A
Répéter2
Aller à x=140-x; y=D-Arctan(A-Ent(A
Stylo écrit
Avancer de 0 pixels
Stylo relevé
⤴
Avancer de 1 pixels
⤴
D-1→D
A+33686470Ent(cos(D-41))+2364428Ent(cos(D-38))+263685Ent(cos(D-35→A
⤴
Cette fois, j'utilise Arctan au lieu d'Arcsin, uniquement par rapport à la variable D préalablement définie.
Voili-voilà ! J'espère avoir été assez clair dans mes explications, si vous souhaitez des détails sur telle ou telle partie, n'hésitez pas à poster
Et surtout...Longue vie à la fx-92+ Spéciale Collège !!
(hmmmm je sais : c'est juste une question de pile, haha )
PS: Voici le programme dans sa version complète: http://wes.casio.com/math/index.php?q=I ... 03F901F902
Last edited by grosged on 28 Oct 2019, 17:09, edited 10 times in total.
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 770
- Images: 75
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Concours de rentrée 2019 - défi de tracé
Wahouh j'ai commencé à lire et c'est assez dingue ! Comment j'aurais pu penser à ça ? !
Bravo en tout cas
Bravo en tout cas
-
ZocipalProgrammeur
Niveau 9: IC (Compteur Infatigable)- Posts: 113
- Joined: 12 Sep 2019, 20:15
- Location: Hauts-de-France
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: 1ère Maths Physique NSI
Re: Concours de rentrée 2019 - défi de tracé
Bravo pour ces explications en plus ça a du être long a écrire ce post.
Merci à toi Grosged
Merci à toi Grosged
Mes programmes sont ici: archives_cat.php?auteur=201254
-
edgar13Modo
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 589
- Images: 24
- Joined: 04 Jan 2019, 20:31
- Location: Sur TI-Planet voyons
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: 2eme annee de medecine
- YouTube: Non
- Twitter: Non
- Facebook: Non
- GitHub: Non
Re: Concours de rentrée 2019 - défi de tracé
Les 3 NumWorks N0110 supplémentaires viennent tout juste d'arriver; il faut dire merci NumWorks.
Pour les collectionneurs attention, ce ne sont pas des préséries. Nous n'avons que 2 préséries pour l'ensemble du concours.
Pour les collectionneurs attention, ce ne sont pas des préséries. Nous n'avons que 2 préséries pour l'ensemble du concours.
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 41958
- Images: 15681
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: Concours de rentrée 2019 - défi de tracé
Merci NumWorks ! (De laisser les autres prendre les NumWorks pendant que je prend la TI-Nspire CX II-T CAS)
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici.
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].
-
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 283
- Images: 20
- Joined: 25 Oct 2018, 17:41
- Location: Chez moi
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Classe comme jamais.
- GitHub: Larwive
Re: Concours de rentrée 2019 - défi de tracé
edgar13 wrote:Bravo pour ces explications en plus ça a du être long a écrire ce post.
Merci à toi Grosged
Et il n'est pas prof de math
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
-
Krevo_Premium
Niveau 6: SM (Super Membre)- Posts: 39
- Joined: 06 Oct 2019, 17:32
- Location: Lyon
- Gender:
- Calculator(s):→ MyCalcs profile
- Twitter: Krevo_
- GitHub: Krevo
Re: Concours de rentrée 2019 - défi de tracé
Bravo aux premiers pour avoir trouvés cette technique, en tout cas je ne suis pas triste car je n'aurais jamais pensé à faire un truc comme ça ( afficher de façon vertical oui, mais faire avec des Cos, je ne pense pas ) :3
-
EncephalogrammeGénéreux
Niveau 8: ER (Espèce Rare: nerd)- Posts: 150
- Joined: 08 Jul 2019, 22:18
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Première
Re: Concours de rentrée 2019 - défi de tracé
Merci à vous (je ne suis pas prof de maths...ni prof de français d'ailleurs : je me relis car j'en fais des fôôtes )
Et Merci Numworks, Texas Instruments et Casio ! (je poste ici mes remerciements car je ne suis pas sur les réseaux sociaux)
Et Merci Numworks, Texas Instruments et Casio ! (je poste ici mes remerciements car je ne suis pas sur les réseaux sociaux)
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 770
- Images: 75
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Who is online
Users browsing this forum: ClaudeBot [spider] and 10 guests