User Tools

Site Tools


clanterne:homework2
Critères & points attribués (/10)
Rappel du contexte 5
Résultats 10
Qualité du code (commentaires, structures utilisées, …) 7
Animation du dessin 0
Explication en dehors du code 4
Total (/50) 26

B.P. : Vous n'avez pas implémenté les animations. Vos commentaires en dehors du programme sont incompréhensibles. Votre code n'est pas du tout commenté mais il fonctionne parfaitement.

J'ai implémenté l’algorithme des H-tree, il consiste dans un premier temps à calculé pour chaque point de l'arbre des boites qui englobe parfaitement ce point et tous ces dépendants. Ensuite on parcours l'arbre à nouveaux mais cette fois on vas positionner chaque point par rapport à son père et sa boites de façon à que le père ce retrouve à l’extérieur de la boite. Pendant c'est deux parcours on alterne entre le nord le sud l'est et l'ouest de façon à qu'un point dont le père est au nord auras un fils à l'est et un à l'ouest avec cette information on peut à la fois calculé la boite du point et ensuite le placer par rapport à son père.

H-tree.py
# Powered by Python 2.7
 
from tulip import *
 
# the updateVisualization(centerViews = True) function can be called
# during script execution to update the opened views
 
# the pauseScript() function can be called to pause the script execution.
# To resume the script execution, you will have to click on the "Run script " button.
 
# the runGraphScript(scriptFile, graph) function can be called to launch another edited script on a tlp.Graph object.
# The scriptFile parameter defines the script name to call (in the form [a-zA-Z0-9_]+.py)
 
# the main(graph) function must be defined 
# to run the script on the current graph
N=[]
S=[]
E=[]
W=[]
index =0
index2=0
d=5
 
def main(graph): 
	Random_layout__viewLayout =  graph.getLayoutProperty("Random layout - (viewLayout)")
	viewBorderColor =  graph.getColorProperty("viewBorderColor")
	viewBorderWidth =  graph.getDoubleProperty("viewBorderWidth")
	viewColor =  graph.getColorProperty("viewColor")
	viewFont =  graph.getStringProperty("viewFont")
	viewFontSize =  graph.getIntegerProperty("viewFontSize")
	viewLabel =  graph.getStringProperty("viewLabel")
	viewLabelColor =  graph.getColorProperty("viewLabelColor")
	viewLabelPosition =  graph.getIntegerProperty("viewLabelPosition")
	viewLayout =  graph.getLayoutProperty("viewLayout")
	viewMetaGraph =  graph.getGraphProperty("viewMetaGraph")
	viewMetric =  graph.getDoubleProperty("viewMetric")
	viewRotation =  graph.getDoubleProperty("viewRotation")
	viewSelection =  graph.getBooleanProperty("viewSelection")
	viewShape =  graph.getIntegerProperty("viewShape")
	viewSize =  graph.getSizeProperty("viewSize")
	viewSrcAnchorShape =  graph.getIntegerProperty("viewSrcAnchorShape")
	viewSrcAnchorSize =  graph.getSizeProperty("viewSrcAnchorSize")
	viewTexture =  graph.getStringProperty("viewTexture")
	viewTgtAnchorShape =  graph.getIntegerProperty("viewTgtAnchorShape")
	viewTgtAnchorSize =  graph.getSizeProperty("viewTgtAnchorSize")
 
 
	for n in graph.getNodes():
		if graph.indeg(n) == 0:
			N.append(0)
			S.append(0)
			E.append(0)
			W.append(0)
			recursive(graph,n,0,0)
			viewLayout[n] = tlp.Coord(0,0, 0)
			affichage(n,0,20,0,0)
 
def affichage(node,xP,yP,i,nesw):
	viewLayout = graph.getLayoutProperty("viewLayout")
	x=0
	y=0
	global index2
	if(nesw==0):
		x=xP
		y=yP - N[i]-d
		viewLayout[node] = tlp.Coord(x,y,0)
	if(nesw==1):
		x=xP-E[i]-d
		y=yP
		viewLayout[node] = tlp.Coord(x,y,0)
	if(nesw==2):
		x=xP
		y=yP + S[i]+d
		viewLayout[node] = tlp.Coord(x, y,0)
	if(nesw==3):
		x=xP + W[i]+d
		y=yP
		viewLayout[node] = tlp.Coord(x,y,0)
	if graph.outdeg(node)!=0:
		for n2 in graph.getOutNodes(node):
			index2 = index2 + 1
			if graph.outdeg(node)!=1:
				nesw = nesw +1
			affichage(n2,x,y,index2,(nesw)%4)
			nesw = nesw +1
 
 
 
def max(x, y):
	if x>y:
		return x
	else:
		return y
 
def recursive(graph,node,i,nesw):
	box1=[0,0,0,0]
	box2=[0,0,0,0]
	global index
	global d
	if graph.outdeg(node) == 0:
		N[i]=0
		S[i]=0
		E[i]=0
		W[i]=0
		box = [N[i],S[i],E[i],W[i]]
		return box
	else:
		if graph.outdeg(node)==2:
			k = 0
			for n2 in graph.getOutNodes(node):
				N.append(0)
				S.append(0)
				E.append(0)
				W.append(0)
				index=index+1
				if k==0:
					box1 = recursive(graph,n2,index,(nesw+1)%4)
					k = 1
				else:
					box2 = recursive(graph,n2,index,(nesw+3)%4)
			box = calcul2(box1,box2,nesw)
			N[i]=box[0]
			E[i]=box[1]
			S[i]=box[2]
			W[i]=box[3]
			return box
		if graph.outdeg(node) == 1:
			for n2 in graph.getOutNodes(node):
				N.append(0)
				S.append(0)
				E.append(0)
				W.append(0)
				index=index+1
				box1 = recursive(graph,n2,index,nesw)
			box = calcul1(box1,nesw)
			N[i]=box[0]
			E[i]=box[1]
			S[i]=box[2]
			W[i]=box[3]
			return box
 
def calcul2(box1,box2,nesw):
	box =[0,0,0,0]
	if nesw == 0:
		box = [max(box1[0],box2[0]),box2[1]+box2[3]+d,max(box1[2],box2[2]),box1[1]+box1[3]+d]
		return box
	if nesw == 1:
		box = [box1[0]+box1[2]+d,max(box1[1],box2[1]),box2[0]+box2[2]+d,max(box1[3],box2[3])]
		return box
	if nesw == 2:
		box = [max(box1[0],box2[0]),box1[1]+box1[3]+d,max(box1[2],box2[2]),box2[1]+box2[3]+d]
		return box
	if nesw == 3:
		box = [box2[0]+box2[2]+d,max(box1[1],box2[1]),box1[0]+box1[2]+d,max(box1[3],box2[3])]
		return box
 
def calcul1(box1,nesw):
	if nesw == 0:
		box = [0,box1[1],box1[0]+box1[2]+d,box1[3]]
		return box
	if nesw == 1:
		box = [box1[0],0,box1[2],box1[1]+box1[3]+d]
		return box
	if nesw == 2:
		box = [box1[0]+box1[2]+d,box1[1],0,box1[3]]
		return box
	if nesw == 3:
		box = [box1[0],box1[1]+box1[3]+d,box1[2],0]
		return box

Résultat sur un arbre Complet

Résultat sur un arbre binaire uniforme aléatoire

Résultat sur un arbre binaire aléatoire

/net/html/perso/melancon/Visual_Analytics_Course/data/pages/clanterne/homework2.txt · Last modified: 2012/10/22 16:43 by bpinaud