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:
|
class Space:
|
||||||
__arrows = []
|
__arrows = []
|
||||||
nb_arrows = 0
|
nb_occupied_sites = 0
|
||||||
|
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
self.node = node
|
self.node = node
|
||||||
for child in node:
|
for child in node:
|
||||||
if(child.tag == "arrow"):
|
if(child.tag == "arrow"):
|
||||||
self.nb_arrows += 1
|
self.nb_occupied_sites += 1
|
||||||
self.__arrows.append(Arrow(child))
|
self.__arrows.append(Arrow(child))
|
||||||
|
|
||||||
def get_arrow(self, i):
|
def get_arrow(self, i):
|
||||||
return self.__arrows[i]
|
return self.__arrows[i]
|
||||||
|
|
||||||
def get_nb_arrows(self):
|
def get_nb_occupied_sites(self):
|
||||||
return self.nb_arrows
|
return self.nb_occupied_sites
|
||||||
|
|
||||||
def get_weight(self, cell, site):
|
def get_weight(self, cell, site):
|
||||||
return 4096
|
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
|
import model
|
||||||
|
|
||||||
sp = model.testmodel.get_states().get_space(0)
|
sp = model.testmodel.get_states().get_space(0)
|
||||||
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
|
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
|
||||||
sites = int(model.testmodel.get_parameters().spaceparam.get_site_multiplicity())
|
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,
|
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 = ' | '
|
view = ' | '
|
||||||
|
|
||||||
|
@ -24,7 +75,7 @@ view = ' | '
|
||||||
for n in range(0, size + 1):
|
for n in range(0, size + 1):
|
||||||
for s in range(0, sites):
|
for s in range(0, sites):
|
||||||
arr = 0
|
arr = 0
|
||||||
for a in range(0, nb_arrows):
|
for a in range(0, occupied):
|
||||||
if (
|
if (
|
||||||
sp.get_arrow(a).get_coord("x") == n
|
sp.get_arrow(a).get_coord("x") == n
|
||||||
and sp.get_arrow(a).get_site() == s
|
and sp.get_arrow(a).get_site() == s
|
||||||
|
@ -40,10 +91,10 @@ for n in range(0, size + 1):
|
||||||
coord = ' ' * sites + ' '
|
coord = ' ' * sites + ' '
|
||||||
|
|
||||||
for k in range(0, size + 1):
|
for k in range(0, size + 1):
|
||||||
if k < 9:
|
if k < 10:
|
||||||
coord += str(k + 1) + ' ' + ' ' * sites * 2
|
coord += str(k) + ' ' + ' ' * sites * 2
|
||||||
else:
|
else:
|
||||||
coord += str(k + 1) + ' ' + ' ' * sites * 2
|
coord += str(k) + ' ' + ' ' * sites * 2
|
||||||
|
|
||||||
print(view)
|
print(view)
|
||||||
print(coord)
|
print(coord)
|
||||||
|
|
Loading…
Reference in New Issue