WIP: Cas des espaces de taille constante: string. + discussion.
This commit is contained in:
parent
8a7f97f53a
commit
0e226e5cc8
Binary file not shown.
|
@ -253,20 +253,20 @@ class Objects:
|
|||
|
||||
class Space:
|
||||
__arrows = []
|
||||
nb_arrows = 0
|
||||
nb_occupied_sites = 0
|
||||
|
||||
def __init__(self, node):
|
||||
self.node = node
|
||||
for child in node:
|
||||
if(child.tag == "arrow"):
|
||||
self.nb_arrows += 1
|
||||
self.nb_occupied_sites += 1
|
||||
self.__arrows.append(Arrow(child))
|
||||
|
||||
def get_arrow(self, i):
|
||||
return self.__arrows[i]
|
||||
|
||||
def get_nb_arrows(self):
|
||||
return self.nb_arrows
|
||||
def get_nb_occupied_sites(self):
|
||||
return self.nb_occupied_sites
|
||||
|
||||
def get_weight(self, cell, site):
|
||||
return 4096
|
||||
|
|
63
src/space.py
63
src/space.py
|
@ -1,13 +1,64 @@
|
|||
"""
|
||||
STRUCTURES DE DONNÉES
|
||||
|
||||
1) STOCKAGE
|
||||
--------
|
||||
- XML
|
||||
Chaque espace est stocké sous forme d'une séquence d'arrows.
|
||||
Chaque arrow associe les coordonnées d'une cellule, un n° de site et un poids
|
||||
(le poids, 'weight', indique le nombre de flèches dans ce site).
|
||||
Seuls les sites contenant des flèches sont mentionnés dans cette séquence.
|
||||
Par convention, les autres sites sont supposés vides.
|
||||
|
||||
2) TRAVAIL
|
||||
-------
|
||||
- si la taille de l'espace est constante,
|
||||
et le nombre maximal de flèches par site peu élevé,
|
||||
alors, l'espace peut être représenté par une string
|
||||
sinon par une liste.
|
||||
|
||||
- Le but de ces structure est:
|
||||
* la visualisation (lors de l'exécution des transitions et des undo/redo).
|
||||
* l'édition de l'espace.
|
||||
|
||||
DISCUSSION
|
||||
|
||||
Les éléments d'interêt pour le moteur graphique sont dans un tableau.
|
||||
Ce tableau est créé par lxml lors de la lecture (parsing) du fichier XML.
|
||||
Il est lu / écrit par des fonctions en C
|
||||
qui peuvent aller d'une case à l'autre par de simples additions.
|
||||
|
||||
Cependant,ce tableau ne répertorie que les sites occupés.
|
||||
Un calcul est donc nécessaire chaque fois qu'un site y a été trouvé
|
||||
s'il faut construire une image à la localisation indiquée par ses coordonnées.
|
||||
NB Les sites non mentionnés dans ce tableau sont supposés vides.
|
||||
|
||||
Si un deuxième tableau est utilisé,
|
||||
alors, des recopies périodiques dans le tableau lxml seront nécessaires.
|
||||
|
||||
Cependant, dans le cas d'un espace de taille constante (cas le plus fréquent),
|
||||
c'est un tableau de tout l'espace (et pas seulement des sites occupés) qui sera
|
||||
construit.
|
||||
Ce tableau permettra d'accéder au contenu de chaque site en une seule étape,
|
||||
par un calcul simple.
|
||||
Et ce calcul sera le même que celui effectué pour produire l'image.
|
||||
|
||||
Cette représentation peut améliorer la lisibilité des algorithmes d'édition.
|
||||
Par ailleurs, lors de l'édition, aucune optimisation graphique n'est nécessaire.
|
||||
|
||||
"""
|
||||
|
||||
import model
|
||||
|
||||
sp = model.testmodel.get_states().get_space(0)
|
||||
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
|
||||
sites = int(model.testmodel.get_parameters().spaceparam.get_site_multiplicity())
|
||||
nb_arrows = int(model.testmodel.get_states().get_space(0).get_nb_arrows())
|
||||
occupied = int(model.testmodel.get_states().get_space(0).nb_occupied_sites)
|
||||
|
||||
|
||||
print("\nspace size =", size, " nb de sites par cellule =", sites,
|
||||
" nb total de flèches dans l'espace =", nb_arrows, end='\n')
|
||||
" nb de sites occupés dans l'ensemble de l' l'espace =",
|
||||
occupied, end='\n')
|
||||
|
||||
view = ' | '
|
||||
|
||||
|
@ -24,7 +75,7 @@ view = ' | '
|
|||
for n in range(0, size + 1):
|
||||
for s in range(0, sites):
|
||||
arr = 0
|
||||
for a in range(0, nb_arrows):
|
||||
for a in range(0, occupied):
|
||||
if (
|
||||
sp.get_arrow(a).get_coord("x") == n
|
||||
and sp.get_arrow(a).get_site() == s
|
||||
|
@ -40,10 +91,10 @@ for n in range(0, size + 1):
|
|||
coord = ' ' * sites + ' '
|
||||
|
||||
for k in range(0, size + 1):
|
||||
if k < 9:
|
||||
coord += str(k + 1) + ' ' + ' ' * sites * 2
|
||||
if k < 10:
|
||||
coord += str(k) + ' ' + ' ' * sites * 2
|
||||
else:
|
||||
coord += str(k + 1) + ' ' + ' ' * sites * 2
|
||||
coord += str(k) + ' ' + ' ' * sites * 2
|
||||
|
||||
print(view)
|
||||
print(coord)
|
||||
|
|
Loading…
Reference in New Issue