π
<-

Graphismes Basic: Dessinez avec une base de données !

Regroupement de tous les tutoriaux z80 (82/83/84)

Graphismes Basic: Dessinez avec une base de données !

Unread postby Persalteas » 26 Oct 2013, 10:19

Cas général

Prenons, au hasard, le code d'une animation Mario en développement:

Code: Select all
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

Image

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: Select all
:{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
Techniquement, la dimension de cette liste est un multiple de 4.

Donc ensuite, je crée un algo qui chope les bonnes valeurs, et qui trace...
Code: Select all
:{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
Pif, paf, pouf. Terminé.

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). :cheers: 
  • 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.

Sans titre.png


Des questions ? Vous êtes pas trop fatigués ? :sleep: 
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. :bj: 

Il suffit de décaler A de 2 et pas de 4, pour utiliser deux fois de suite les mêmes coordonnées ! ;)

Image

Considérons ce nouvel exemple.

Code: Select all
:{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
Le première fois, l'algorithme va utiliser 10,10,30,30.
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 !!! :bj:

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... :study: 

Allez, faites en bon usage !! :bj:
You do not have the required permissions to view the files attached to this post.
User avatar
PersalteasMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 6.2%
 
Posts: 2337
Images: 113
Joined: 04 Feb 2010, 00:00
Location: Evry (France)
Gender: Male
Calculator(s):
MyCalcs profile
Class: PhD candidate, Bioinformatics

Re: Graphismes Basic: Dessinez avec une base de données !

Unread postby Wistaro » 26 Oct 2013, 10:21

Merci pour ce superbe tutoriel, une fois de plus :)

Et avec l'image je comprends mieux merci :p
Nouveau sur le site, ClaudeBot [spider] ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
User avatar
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 88.4%
 
Posts: 3183
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingénieur en électronique
YouTube: Wistaro
Twitter: Wistaro
GitHub: Wistaro

Re: Graphismes Basic: Dessinez avec une base de données !

Unread postby Adriweb » 26 Oct 2013, 13:23

Very nice :D

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.9%
 
Posts: 14744
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb


Return to Tutoriaux

Who is online

Users browsing this forum: ClaudeBot [spider] and 4 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.
733 utilisateurs:
>661 invités
>65 membres
>7 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)