π
<-

Concours de rentrée 2019 - défi de tracé

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Larwive » 24 Oct 2019, 13:00

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 ?
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].:whistle:
User avatar
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 89.6%
 
Posts: 283
Images: 20
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Classe comme jamais.
GitHub: Larwive

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Larwive » 24 Oct 2019, 13:38

Le suspens n'arrête pas de grandir.
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].:whistle:
User avatar
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 89.6%
 
Posts: 283
Images: 20
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Classe comme jamais.
GitHub: Larwive

Re: Concours de rentrée 2019 - défi de tracé

Unread postby grosged » 24 Oct 2019, 13:43

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...
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
(vous remarquerez , au passage, cette mini-optimisation qui consiste à ne pas refermer les parenthèses en fin de ligne;) )

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.

Image(Merci @Lephe pour l'animation 8-) )

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é
Ne faîtes pas attention au "44→D", c'est pour plus tard ;)

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
"655364x→A" pour la 1ère bande de 32bits, laquelle est un multiple de 32 (et x est justement à 32), ainsi on gagne un octet ;)
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
Là, j'ai focalisé sur les tracés horizontaux uniquement (les diagonales s'affichent d'elles-même puisque le tracé reste en continu)
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é
J'ai fini par m'apercevoir qu'un affichage en tracé "classique" s'avérait plus économique qu'en mode sprite!
(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
L'astuce principale résidence dans l'économie de données: on fait comme si les 4 caractères composant "2019" faisaient chacuns 3x5 pixels (on fait abstraction du pixel de séparation entre chaque, l'affichage s'occupera de les "détacher", d'où le pas de 4/3 ;) )
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
Là , j'ai opté pour un affichage symétrique (donc presque 2x moins de données ;) )
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 :p )

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.
User avatar
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 30.2%
 
Posts: 770
Images: 75
Joined: 14 Sep 2011, 12:29
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Zocipal » 24 Oct 2019, 13:54

Wahouh j'ai commencé à lire et c'est assez dingue ! Comment j'aurais pu penser à ça ? ;) !
Bravo en tout cas :D
Image
User avatar
ZocipalProgrammeur
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 60.7%
 
Posts: 113
Joined: 12 Sep 2019, 20:15
Location: Hauts-de-France
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ère Maths Physique NSI

Re: Concours de rentrée 2019 - défi de tracé

Unread postby edgar13 » 24 Oct 2019, 13:57

Bravo pour ces explications en plus ça a du être long a écrire ce post.
Merci à toi Grosged :D
Mes programmes sont ici: archives_cat.php?auteur=201254
User avatar
edgar13Modo
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 97.4%
 
Posts: 589
Images: 24
Joined: 04 Jan 2019, 20:31
Location: Sur TI-Planet voyons
Gender: Male
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é

Unread postby critor » 24 Oct 2019, 13:57

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.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.3%
 
Posts: 41958
Images: 15681
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Larwive » 24 Oct 2019, 14:00

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. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est ClaudeBot [spider].:whistle:
User avatar
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 89.6%
 
Posts: 283
Images: 20
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Classe comme jamais.
GitHub: Larwive

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Krevo_ » 24 Oct 2019, 14:06

edgar13 wrote:Bravo pour ces explications en plus ça a du être long a écrire ce post.
Merci à toi Grosged :D


Et il n'est pas prof de math ;)
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
User avatar
Krevo_Premium
Niveau 6: SM (Super Membre)
Niveau 6: SM (Super Membre)
Level up: 89.3%
 
Posts: 39
Joined: 06 Oct 2019, 17:32
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: Krevo_
GitHub: Krevo

Re: Concours de rentrée 2019 - défi de tracé

Unread postby Encephalogramme » 24 Oct 2019, 14:08

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
User avatar
EncephalogrammeGénéreux
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 31.6%
 
Posts: 150
Joined: 08 Jul 2019, 22:18
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Première

Re: Concours de rentrée 2019 - défi de tracé

Unread postby grosged » 24 Oct 2019, 14:10

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 :p )
Et Merci Numworks, Texas Instruments et Casio ! (je poste ici mes remerciements car je ne suis pas sur les réseaux sociaux)
User avatar
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 30.2%
 
Posts: 770
Images: 75
Joined: 14 Sep 2011, 12:29
Gender: Not specified
Calculator(s):
MyCalcs profile

PreviousNext

Return to News Divers

Who is online

Users browsing this forum: ClaudeBot [spider] and 10 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.
673 utilisateurs:
>644 invités
>20 membres
>9 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)