Seuls les membres ayant 30 points peuvent parler sur le chat.
Gestion du compte
Calculatrices
Graph 35 à 100 (CFX)
Graph 25/25+ (Pro) (fx-7400)
Graph 35+USB/75/85/95 (SD)
Graph 100/100+ (AFX)
ClassPad 300/330
Fx-CG 10/20
Fx-CP 400
Graph 90+E

Retour aux miniatures
Tri avancé
Liste des programmes
Nom Date
Sprite Recon
Tab Graphique
Dessin auto
PixelArt Graph
BetterFont
Map Generator
Draw tool
BetterInput
CasioString
Drawstat facile
Codage
Pixel Art
Placer le text
Zoom2
Defgraph
Dessiner
Imager
Molécule
2mn page
PaintGold
Pages: 1,2,3,4 >>

¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graphs 35 à 100 >> Graphisme >> Sprite Recon
Sprite Recon
Version : Alpha Taille : 1500 octets Ajouté le : 2019-05-01 19:36 Modifié le : 2019-05-05 18:23
Auteur et posteur :
DisperseurHors ligneMembrePoints: 1497 Défis: 0 Message
Planète Casio - Programme Casio de graphisme - Sprite Recon - disperseur - Calculatrices
Nombre de visites sur cette page : 564
Score au progrank : 17
Pas encore de note !

Vous devez être inscrit(e) et avoir 20 points ou plus pour noter.
46 téléchargements | Soumettre un test

Ce programme est sous licence Creative Commons 2.0 BY


Description :

Bonjour à tous,
Comme promis dans la dernière rdp je publie ici la première version de mon algorithme de reconnaissance de sprite.
Comme on peut le deviner ce programme reconnait des sprites.
Au démarrage du programme, on se retrouve dans une interface utilisateur en locate, dans laquelle on peux dessiner le sprite de notre choix (actuellement de taille maximum 7*7 pixels). Puis on presse [EXE], la calto potasse quelques dixièmes de seconde et elle vous dit si le sprite donné est connu. Si oui, alors vous avez une réponse positive, sinon le programme l\'enregistre et sera capable de le reconnaître plus tards. Mieux, si ce sprite est référencé dans la petite base de données intégrée au programme, l'algo vous dit de quelle forme il s'agit. Actuellement les formes implémentées sont:
-carré de 2*2 px;
-carré vide de 3*3 px;
-cercle vide de 4px de diamètre;
-cercle vide de 5px de diamètre;
-pixel (point);
-croix de 3px de largeur.

Pour ceux qui ne veulent pas télécharger le programme, voici son code source:

Do
LpWhile Getkey<>0

0->A~Z
ClrText

'LIST MEM
"MEM"->List 1
If List 1[1]=0
Then 100->Dim List 1
"MEM"->List 1
1->List 1[1]
15->List 1[2]
495->List 1[3]
63903->List 1[4]
186->List 1[5]
4357252->List 1[6]
27030->List 1[7]
15255086->List 1[8]
IfEnd

'PICT BASE
[[0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0][0,0,0,0,0,0,0]]->Mat A

'PICT EDITOR

'_->_PICT LOAD
For 1->Theta To 7
For 1-><r> To 7
Mat A[Theta,<r>]=1=>Locate <r>,Theta,"_#E6A6_"
Next
Next

'_->_BACKGROUND
For 1-><r> To 7
Locate 8,<r>,"|"
Next

Red Locate 9,1,"Sprite Recon"
Blue Locate 9,3,"By Disperseur"
Black Locate 9,4,"Use  [_#E690__#E692__#E693__#E691_]"
Black Locate 9,5,"and  [SHIFT]"
Black Locate 9,6,"and  [ALPHA]"
Black Locate 9,7,"then [EXE]"

'_->_POS INIT
1-><r>:1->Theta
Locate 1,1,"+"

'_->_MAIN LEAP
While 1
Do
LpWhile Getkey=0
If Mat A[Theta,<r>]=1
Then Locate <r>,Theta,"_#E6A6_"
Else Locate <r>,Theta," "
IfEnd

'_->_COMMANDS
<r><7=>Getkey=27=>Isz <r>
<r>>1=>Getkey=38=>Dsz <r>
Theta<7=>Getkey=37=>Isz Theta
Theta>1=>Getkey=28=>Dsz Theta
Getkey=78=>1->Mat A[Theta,<r>]
Getkey=77=>0->Mat A[Theta,<r>]

Locate <r>,Theta,"+"
Getkey=31=>Break
Do
LpWhile Getkey<>0
WhileEnd
ClrText

"Analyse.."

'FIRST POINT SEARCHING
For 1->Theta To 7
For 1-><r> To 7
If Mat A[Theta,<r>]=1
Then
<r>->A~B
Theta->C~D
Break
IfEnd
Next
Next

'SIZE DETERMINING
For 1->Theta To 7
For 1-><r> To 7
If Mat A[Theta,<r>]=1
Then
<r><A=><r>->A
<r>>B=><r>->B
Theta<C=>Theta->C
Theta>D=>Theta->D
IfEnd
Next
Next

'READING MAT DIM
{D-C+1,B-A+1}->Dim Mat B

'WEIGHT MAT DIM
{D-C+1,B-A+1}->Dim Mat C

For C->Theta To D
For A-><r> To B
Mat A[Theta,<r>]=1=>1->Mat B[Theta-C+1,<r>-A+1]
Next
Next

'WEIGHT MAT FILL
For 1->Theta To D-C+1
For 1-><r> To B-A+1
2^W->Mat C[Theta,<r>]
Isz W
Next
Next

'SOM CALC
0->S
For 1->Theta To D-C+1
For 1-><r> To B-A+1
S+(Mat B[Theta,<r>]*Mat C[Theta,<r>])->S
Next
Next

'SEARCH
"S="
SDisps
'IMAGES REFERENCEES

For 1-><r> To 100
If List 1[<r>]=S
Then "Connu"
Break
IfEnd
If List 1[<r>]=0
Then "Inconnu, enregistré"
S->List 1[<r>]
Break
IfEnd
Next

S=1=>"POINT"
S=15=>"CARRE 2*2"
S=495=>"CARRE 3*3"
S=63903=>"CARRE 4*4"
S=186=>"CROIX 3*3"
S=4357252=>"CROIX 5*5"
S=27030=>"CERCLE D=4"
S=15255086=>"CERCLE D=5"

ClrMat  


Le petit bémol est que l'algo ne peux pas reconnaître plusieurs sprites regroupés. Pour parer à ce problème je cherche un moyen de détecter les différents sprites qui pourraient êtres présents dans l'image donnée au début.

Sur ce, si vous avez des questions (et je pense qu'il y en aura ) n'hésitez pas.

A+ sur Planet Casio


Commentaires :

Pages: 1, 2, 3, 4, 5 | Suivante

DisperseurHors ligneMembrePoints: 1497 Défis: 0 Message
Posté le 02-05-2019 à 07:19 | #
@Lephenixnoir : donc la complexité d'un programme c'est le nombre d'opérations qu'il effectue pour obtenir le résultat ?
Shadow15510Hors ligneAdministrateurPoints: 3789 Défis: 15 Message
Posté le 02-05-2019 à 08:14 | #
On peut définir ça comme ça mais c'est aussi le temps que toi as pris à le coder la difficulté est subjective : elle dépend de toi et de ton niveau en programmation.
DisperseurHors ligneMembrePoints: 1497 Défis: 0 Message
Posté le 02-05-2019 à 08:23 | #
Mouais... 5ans de programmation soutenue.. tu considère ça comme "intermédiaire" ? Je ne sait pas si on parle de la même chose la .. je parle de la complexité comme on en parlais dans les derniers messages de Lephe dans la dernière rdp.
Shadow15510Hors ligneAdministrateurPoints: 3789 Défis: 15 Message
Posté le 02-05-2019 à 08:26 | #
Non, c'est plus qu'intermédiaire : c'est plutôt « confirmé » comme niveau

Effectivement, j'avais mal compris
Breizh_craftEn ligneModérateurPoints: 980 Défis: 7 Message
Posté le 02-05-2019 à 08:59 | #
Il est question de cette complexité : https://fr.wikipedia.org/wiki/Analyse_de_la_complexit%C3%A9_des_algorithmes
DisperseurHors ligneMembrePoints: 1497 Défis: 0 Message
Posté le 02-05-2019 à 11:26 | #
C'est ce que je disait. La complexité consiste à connaître le nombre d'opérations nécessaire pour obtenir le résultat voulut.
LephenixnoirHors ligneAdministrateurPoints: 15755 Défis: 136 Message
Posté le 02-05-2019 à 12:05 | #
Oui c'est ça, absolument. Après il faut choisir quelles opérations tu comptes et d'autres détails du genre mais c'est bon.

Tu noteras qu'en général on ne les compte pas une à une mais on calcule un "équivalent asymptotique" qui est une sorte d'ordre de grandeur.
DisperseurHors ligneMembrePoints: 1497 Défis: 0 Message
Posté le 02-05-2019 à 12:18 | #
Une sorte de mélange entre moyenne et max ?
HackcellEn ligneMembrePoints: 1140 Défis: 6 Message
Posté le 02-05-2019 à 12:32 | #
Non, c'est un poil plus complexe, par exemple, je veux rechercher si une certaine valeur est dans une liste de N valeur.

-Je vais d'abord lire cette valeur
-Initialiser un compteur à zéro (appelons le i)
-Initiliser un booléen e False

Puis je vais faire N fois les opérations suivantes:
-Lire la i-eme valeur de la liste
-La comparer avec la valeur que j'ai lue au début
-Si elle sont égales, je passe le booléen à True et je quitte la boucle
-Sinon j'incremente i et je recommence

-En fin j'affiche la valeur du booléen.

On considère le pire des cas (on ne trouve pas la valeur du début), dans ce cas là on aura effectuer :
3 + 4*N +1 étapes, soit 4*N +4.
On se rend compte que la durée du programme augmente linéairement avec la taille de la liste (notée N), on dit donc que la complexité algorithmique temporelle asymptomatique est en O(N).

Je sais pas trop si j'ai été claire, mais au pire on me corrigera
LephenixnoirHors ligneAdministrateurPoints: 15755 Défis: 136 Message
Posté le 02-05-2019 à 12:50 | #
Une sorte de mélange entre moyenne et max ?

Pas tout à fait. En général on calcule le nombre d'opérations dans le pire cas.

En revanche, lorsque tu écris ton algorithme, il y a des paramètres qui vont influencer le nombre d'opérations à faire. Par exemple le nombre de pixels dans ton sprite.

Ce qu'on fait c'est qu'on regarde le nombre d'opérations comme une fonction de ce paramètre. Donc tu n'as pas un résultat fixe, tu as un nombre d'opérations différent pour chaque taille de sprite. Ce qui est normal !

Ensuite on calcule ce que j'apelle un "équivalent asymptotique" de cette fonction, qui te donne à quel point le temps d'exécution varie quand le paramètre change. Pour reprendre l'exemple de Kouhai~, on sait que la complexité est 4*N+4, mais on se contente de dire O(N), ce qui signifie "en gros une constante fois N".

Pages: 1, 2, 3, 4, 5 | Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 70 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd