Bonjour.
Dans le cadre d'un projet, nous sommes amenés a stocker dans les noeuds d'un arbre (nommé srt) une position(2 coordonnées) et une forme géométrique (nommée lsr).
Nous avons choisi la POO et avons donc crée une classe SRT, une classe Node (pour les noeuds), et diverses formes (pour l'instant je n'ai implementé qu'une classe Cercle).
Un objet de type SRT a comme unique attribut un noeudRacine.
Chaque objet de type Node a comme attribut :
- un noeud parent
- une liste d'enfants
- une position associée
- un lsr (une forme) associé
Enfin, ma classe cercle dispose d'une methode contains(point) renvoyant true si le point est dans le cercle considéré et faux sinon.
Mon objectif est de créer une méthode contains(point) pour ma classe SRT qui rendrait true si le point est dans l'un des lsr(cercles) associé à un des noeuds du srt en question
Voila le code que j'ai implementé dans ma classe SRT :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| methods
function boolean = contains(obj, point)
boolean = contains2(obj.noeudRacine, point);
end % contains
end % methods non static
methods (Static = true)
function boolean = contains2(noeudCourant, point)
boolean = noeudCourant.lsr.contains(point);
noeudsFils = noeudCourant.fils;
nb = length(noeudsFils);
for i=1:nb
boolean = boolean || contains2(noeudsFils(i), point);
end
end % contains2
end % methods static |
Pour tester mon code, j'ai crée plusieurs noeuds reliés entre eux via les attributs parent et fils :
srt
|
racine
|
fils1--------------fils2
|
fils11----fils12
|
fils111
et enfin j'ai créé un point uniquement contenu dans fils2
Mon problème : Lorsque j’exécute la commande
>>srt.contains2(fils111,p1),srt.contains2(fils12,p1),srt.contains2(fils2,p1)
ie avec des feuilles, ça marche : renvoie 0, 0, 1,
mais lorsque je teste sur les autres noeuds, j'ai le message d'erreur suivant :
1 2 3 4 5 6 7 8 9
|
>>srt.contains2(fils1,p1)
??? Undefined function or method 'contains2' for
input arguments of type 'Node'.
Error in ==> SRT>SRT.contains2 at 46
boolean = boolean ||
contains2(noeudsFils(i), point); |
sachant que ma ligne 46 est :
boolean = boolean || contains2(noeudsFils(i), point);
Je ne parviens pas a trouver d’où vient l'erreur.
On dirait qu'il me reproche d'avoir mis des objets de type Node en argument de ma méthode contains2 ???!!!!
Avez-vous une idée ?
Merci beaucoup !
Partager