Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
[Graphismes] Dessinez avec une base de données
5 participants
[Graphismes] Dessinez avec une base de données
Cas général
Prenons, au hasard, le code d'une animation Mario en développement:
C'est beau, hein ?
Certes, mais un peu lourd.
Il existe un moyen d'économiser un octet par ligne. (un peu moins)
La base de données.
Comment ça marche ? Voici le principe
Alors, étape 1, créer la base de données.
Je vais donc rentrer tout ça dans une liste.
Quelques remarques tout de même:
Dans cet exemple, je vais prendre une liste hyper-grosse pour que vous compreniez bien le principe. Mais je vous le déconseille IRL.
Donc ensuite, je crée un algo qui chope les bonnes valeurs, et qui trace...
Il faut bien comprendre:
Des questions ? Vous êtes pas trop fatigués ?
Il vous reste ensuite à rajouter les quelques Pt-On nécessaires à la complétion de votre dessin !
Optimisation plus poussée: si tous les points se relient
Dans le précédent exemple, on a finalement pas gagné grand chose en poids, et on a perdu en vitesse.
Quand tous les points se relient, il y a moyen d'exploser le gain de poids.
Il suffit de décaler A de 2 et pas de 4, pour utiliser deux fois de suite les mêmes coordonnées !
Considérons ce nouvel exemple.
Puis, A ne va se décaler que de 2:
La seconde fois, il utilisera 30,30,21,45.
Cette technique nous permet d'économiser non plus 1, mais une moyenne de 5 octets par ligne !!!
Et on utilise très souvent des dessins avec des points reliés, quand on y fait attention.
C'est surtout dans ce cas là que la base de données devient un avantage...
Allez, faites en bon usage !!
Prenons, au hasard, le code d'une animation Mario en développement:
- Code:
Ligne(17,40,28,40
Ligne(15,39,16,39
Ligne(29,39,30,39
Ligne(13,38,14,38
Ligne(31,38,33,36
Ligne(8,33,12,37
Ligne(34,35,34,34
Ligne(35,33,35,30
Ligne(7,32,7,31
Ligne(6,30,6,29
Ligne(36,29,38,27
Ligne(5,28,5,26
Ligne(27,26,38,26
Ligne(28,25,31,25
Ligne(30,24,31,24
Ligne(4,25,4,24
Ligne(3,23,3,20
Ligne(31,23,31,20
Pt-On(2,19
Ligne(32,19,32,18
Ligne(1,18,1,14
Ligne(2,13,3,12
Ligne(33,17,33,13
Ligne(4,11,7,11
Ligne(7,10,8,9
Ligne(8,8,11,5
Ligne(34,15,34,8
Ligne(33,7,32,6
Ligne(33,8,31,6
Ligne(12,5,13,4
Ligne(14,4,15,3
Ligne(16,3,17,2
Ligne(18,2,24,2
Ligne(31,6,28,6
Ligne(29,5,27,5
Ligne(27,4,25,4
Ligne(25,3,21,3
Ligne(19,4,21,4
Ligne(17,6,18,5
Ligne(17,10,17,7
Ligne(27,7,29,7
Ligne(18,10,19,9
Ligne(18,11,21,8
Ligne(21,9,22,8
Ligne(23,8,28,8
Ligne(28,9,30,11
Ligne(28,10,30,12
Ligne(31,11,32,12
Ligne(30,13,30,15
Ligne(29,16,27,18
Ligne(27,19,25,21
Ligne(27,18,24,18
Ligne(25,19,25,21
Ligne(26,22,28,23
Ligne(19,18,19,19
Pt-On(18,17
Ligne(17,17,17,20
Ligne(18,20,17,21
Ligne(17,21,19,23
Pt-On(20,23
Ligne(9,11,11,11
Ligne(8,12,9,12
Ligne(11,12,12,12
Ligne(8,13,8,16
Ligne(12,13,13,13
Ligne(13,14,13,16
Ligne(12,16,12,17
Ligne(11,17,11,19
Ligne(7,17,7,19
Ligne(6,19,10,19
Ligne(4,20,5,20
Ligne(5,14,5,16
Ligne(4,16,4,17
Pt-On(3,17
Ligne(8,20,10,20
Ligne(9,21,10,21
Ligne(11,22,12,22
Ligne(13,23,15,23
Ligne(15,22,17,22
Ligne(16,24,17,24
Ligne(18,25,20,25
Ligne(21,25,26,26
Pt-On(21,24
Ligne(12,26,15,29
Ligne(16,29,17,30
Ligne(18,30,19,31
Ligne(20,31,21,31
Ligne(22,32,32,32
Ligne(33,31,34,31
Ligne(22,31,22,34
Ligne(23,35,23,36
Ligne(24,37,27,37
Ligne(28,36,30,34
Pt-On(30,33
Pt-On(26,36
Ligne(25,33,27,33
Pt-On(25,34
Pt-On(27,34
C'est beau, hein ?
Certes, mais un peu lourd.
Il existe un moyen d'économiser un octet par ligne. (un peu moins)
La base de données.
Comment ça marche ? Voici le principe
- Créer une base de données qui contient tous les coordonées de points nécessaires au dessin des lignes
- Créer un algorithme qui va extraire de cette base de données les coordonées nécessaires au traçage d'une ligne, puis passer à la suivante
Alors, étape 1, créer la base de données.
Je vais donc rentrer tout ça dans une liste.
Quelques remarques tout de même:
- Vous ne pouvez utiliser qu'un seul type d'insctruction à la fois (ici j'ai viré les Pt-On )
- ATTENTION: plus votre liste est grande, plus ça va être lent. Ne pas hésiter à la couper en plusieurs petites listes et à recommencer plusieurs fois l'algorithme de traçage.
- Au maximum, vous pouvez stocker 249 lignes dans une liste (250*4>999). Mais je vous le déconseille, c'est très lent et ça demande beaucoup de RAM libre.
- Vous n'êtes pas obligés d'utiliser L1, L2, ou une liste perso. Ans, (ou Rép en français), c'est sympa aussi.
Dans cet exemple, je vais prendre une liste hyper-grosse pour que vous compreniez bien le principe. Mais je vous le déconseille IRL.
- Code:
:{17,40,28,40,15,39,16,39,29,39,30,39,13,38,14,38,31,38,33,36,8,33,12,37,34,35,34,34,35,33,35,30,7,32,7,31,6,30,6,29,36,29,38,27,5,28,5,26,27,26,38,26,28,25,31,25,30,24,31,24,4,25,4,24,3,23,3,20,31,23,31,20,32,19,32,18,1,18,1,14,2,13,3,12,33,17,33,13,4,11,7,11,7,10,8,9,8,8,11,5,34,15,34,8,33,7,32,6,33,8,31,6,12,5,13,4,14,4,15,3,16,3,17,2,18,2,24,2,31,6,28,6,29,5,27,5,27,4,25,4,25,3,21,3,19,4,21,4,17,6,18,5,17,10,17,7,27,7,29,7,18,10,19,9,18,11,21,8,21,9,22,8,23,8,28,8,28,9,30,11,28,10,30,12,31,11,32,12,30,13,30,15,29,16,27,18,27,19,25,21,27,18,24,18,25,19,25,21,26,22,28,23,19,18,19,19,17,17,17,20,18,20,17,21,17,21,19,23,9,11,11,11,8,12,9,12,11,12,12,12,8,13,8,16,12,13,13,13,13,14,13,16,12,16,12,17,11,17,11,19,7,17,7,19,6,19,10,19,4,20,5,20,5,14,5,16,4,16,4,17,8,20,10,20,9,21,10,21,11,22,12,22,13,23,15,23,15,22,17,22,16,24,17,24,18,25,20,25,21,25,26,26,12,26,15,29,16,29,17,30,18,30,19,31,20,31,21,31,22,32,32,32,33,31,34,31,22,31,22,34,23,35,23,36,24,37,27,37,28,36,30,34,25,33,27,33
Donc ensuite, je crée un algo qui chope les bonnes valeurs, et qui trace...
- Code:
:{17,40,28,40,15,39,16,39,29,39,30,39,13,38,14,38,31,38,33,36,8,33,12,37,34,35,34,34,35,33,35,30,7,32,7,31,6,30,6,29,36,29,38,27,5,28,5,26,27,26,38,26,28,25,31,25,30,24,31,24,4,25,4,24,3,23,3,20,31,23,31,20,32,19,32,18,1,18,1,14,2,13,3,12,33,17,33,13,4,11,7,11,7,10,8,9,8,8,11,5,34,15,34,8,33,7,32,6,33,8,31,6,12,5,13,4,14,4,15,3,16,3,17,2,18,2,24,2,31,6,28,6,29,5,27,5,27,4,25,4,25,3,21,3,19,4,21,4,17,6,18,5,17,10,17,7,27,7,29,7,18,10,19,9,18,11,21,8,21,9,22,8,23,8,28,8,28,9,30,11,28,10,30,12,31,11,32,12,30,13,30,15,29,16,27,18,27,19,25,21,27,18,24,18,25,19,25,21,26,22,28,23,19,18,19,19,17,17,17,20,18,20,17,21,17,21,19,23,9,11,11,11,8,12,9,12,11,12,12,12,8,13,8,16,12,13,13,13,13,14,13,16,12,16,12,17,11,17,11,19,7,17,7,19,6,19,10,19,4,20,5,20,5,14,5,16,4,16,4,17,8,20,10,20,9,21,10,21,11,22,12,22,13,23,15,23,15,22,17,22,16,24,17,24,18,25,20,25,21,25,26,26,12,26,15,29,16,29,17,30,18,30,19,31,20,31,21,31,22,32,32,32,33,31,34,31,22,31,22,34,23,35,23,36,24,37,27,37,28,36,30,34,25,33,27,33
:For(A,1,dim(Rép)-3,4
:Ligne(Rép(A),Rép(A+1),Rép(A+2),Rép(A+3
:End
Il faut bien comprendre:
- Rép (ou Ans) est une liste. Donc je peux très bien écrire Rép(A) comme j'écrirais L1(A).
- Dans une boucle For allant de 1 à la dimension de la liste moins 3 (c'est à dire du début de la première ligne au début de la dernière ligne), je vais demander à la fonction Ligne de dessiner selon les coordonées A, A+1, A+2 et +3.
Des questions ? Vous êtes pas trop fatigués ?
Il vous reste ensuite à rajouter les quelques Pt-On nécessaires à la complétion de votre dessin !
Optimisation plus poussée: si tous les points se relient
Dans le précédent exemple, on a finalement pas gagné grand chose en poids, et on a perdu en vitesse.
Quand tous les points se relient, il y a moyen d'exploser le gain de poids.
Il suffit de décaler A de 2 et pas de 4, pour utiliser deux fois de suite les mêmes coordonnées !
Considérons ce nouvel exemple.
- Code:
:{10,10,30,30,21,45,10,30,30,10,30,30,10,30,10,10,30,10
:For(A,1,dim(Rép)-3,2
:Ligne(Rép(A),Rép(A+1),Rép(A+2),Rép(A+3
:End
Puis, A ne va se décaler que de 2:
La seconde fois, il utilisera 30,30,21,45.
Cette technique nous permet d'économiser non plus 1, mais une moyenne de 5 octets par ligne !!!
Et on utilise très souvent des dessins avec des points reliés, quand on y fait attention.
C'est surtout dans ce cas là que la base de données devient un avantage...
Allez, faites en bon usage !!
Dernière édition par persalteas le Sam 26 Oct 2013 - 11:20, édité 1 fois
Re: [Graphismes] Dessinez avec une base de données
Super tuto encore une fois
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [Graphismes] Dessinez avec une base de données
Merci pour ce superbe tutoriel!
Mias il y une chose que je ne comprend pas:
Mias il y une chose que je ne comprend pas:
Tu peut m'expliquer pourquoi tu fait cela? je ne voit pas trop l’intérêt de prendre le début de la première ligne au début de la dernière lignePersalteas a écrit:Dans une boucle For allant de 1 à la dimension de la liste moins 3 (c'est à dire du début de la première ligne au début de la dernière ligne), je vais demander à la fonction Ligne de dessiner selon les coordonées A, A+1, A+2 et +3.
Re: [Graphismes] Dessinez avec une base de données
Je vais répondre avec une image
Le temps de la créer...
Le temps de la créer...
Re: [Graphismes] Dessinez avec une base de données
J'aime bien le principe d'expliquer avec une image .
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [Graphismes] Dessinez avec une base de données
Ben tiens... Va résumer ça à l'écrit !
Bien plus simple, les schémas
Je fais plein de SVT et de biotechno, moi, dans la vie. J'aime les schémas.
Bien plus simple, les schémas
Je fais plein de SVT et de biotechno, moi, dans la vie. J'aime les schémas.
Re: [Graphismes] Dessinez avec une base de données
Bravo, pour une fois que je comprends un tuto, j’essaierai donc à partir de demain soir, de faire le visage de mario avec...
Re: [Graphismes] Dessinez avec une base de données
Pour les pt-On(, ça donne:
- Code:
:{2,19,18,17,20,23,3,17,21,24,30,33,26,36,25,34,27,34}
:For(A,1,dim(Rép)-1,2
:Pt-On(Rép(A),Rép(A+1
:End
Re: [Graphismes] Dessinez avec une base de données
C'est ça tu as compris le système .
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [Graphismes] Dessinez avec une base de données
Persalteas dévoile et explique en plus le "secret industriel" de son morpion à graphisme 3D. Faisons en bon usage.
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [Graphismes] Dessinez avec une base de données
J'utilise ce système a peu près systématiquement dans mes programmes...
C'est même la principale différence entre Herssahe 4.0 et 4.2 pour ceux qui connaissent:
Herssahe 4.0 est tout en Ligne(), le 4.2 est tout en bases de données...
Donc l'un est lourd et fluide, l'autre est plus léger et plein de lags...
C'est même la principale différence entre Herssahe 4.0 et 4.2 pour ceux qui connaissent:
Herssahe 4.0 est tout en Ligne(), le 4.2 est tout en bases de données...
Donc l'un est lourd et fluide, l'autre est plus léger et plein de lags...
Re: [Graphismes] Dessinez avec une base de données
Ah... La Ti... Ce n'est qu'une calculatrice tout de même...
Sujets similaires
» Proposez vos cours pour la base de données du site !
» Convertisseur de base X vers base Y
» [Graphismes] Les fonctions de dessin
» [PROJET MARIO]Topic sur les graphismes
» Sauvegarder des données
» Convertisseur de base X vers base Y
» [Graphismes] Les fonctions de dessin
» [PROJET MARIO]Topic sur les graphismes
» Sauvegarder des données
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++