Bonjour,
J'essaie de retrouver des formes fermées sur une image vectorielle. Pour ça j'utilise différentes structure du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
struct PointLine{
double abs;
double ord;
};
 
struct PointArc {
double absCentre;
double ordCentre;
double rayon;
double angleDebut; // en degré
double angleFin;
};
 
struct G03 {
int numLigneG03;
char GCode[];
PointLine P1;
PointLine P2;
PointArc P3;
};
 
struct G01 { //....
int numLigneG01;
char GCode[];
PointLine P1;
PointLine P2;
};
 
struct Point {
G03 Objet03;
G01 Objet01;
};
 
struct Element {
Point forme;
};
Je manipule des motifs dans mon image constitués de traits et d'arc de cercle, les coordonnées d'un motif ou d'une forme que j'estime fermée ne sont pas toujours identiques. C'est à dire quand j'ai un arc et un trait qui appartiennent au meme motif et qui se suivent, il arrive qu'il y ait dans les coordonnées censées etre une intersection du trait et de l'arc quelques dizièmes de mm de différence au lieu que se soient exactement les memes.
Je crée une liste de ma structure Element de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Element element;
QList<Element> list;
Tous les arguments utilisés dans mes structures sont stockés dans un fichier.txt que j'ai appelé pour le coup : "CoordonneesCompletesGO1_GO2_GO3.txt".

Il est donc très simple d'initialiser ma liste.
Ce qui donne quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
string file = "CoordonneesCompletesGO1_GO2_GO3.txt";
 
if ( !fichier ) {
cout << "fichier inexistant";
}
else {
string chaine;
 
for(int i = 0; i < CorrespondanceLignesArc ; i++)
{
getline(fichier, chaine);
istringstream t(chaine);
t.clear();
t.str(chaine);
t >> setprecision (20) >> element.forme.Objet03.numLigneG03
>> element.forme.Objet03.GCode >> element.forme.Objet03.P1.abs
>> element.forme.Objet03.P1.ord >> element.forme.Objet03.P2.abs
>> element.forme.Objet03.P2.ord >> element.forme.Objet03.P3.absCentre
>> element.forme.Objet03.P3.ordCentre >>element.forme.Objet03.P3.angleDebut
>> element.forme.Objet03.P3.angleFin >> element.forme.Objet03.P3.rayon;
list << element;
}
//element.forme.Objet03.P1.abs .... abscisse du Point1 d'un arc de cercle
//element.forme.Objet03.P1.ord .... ordonnée du Point1 du même arc
//element.forme.Objet03.P2.abs .... abscisse du Point2 du meme arc
//element.forme.Objet03.P2.ord .... ordonnée du Point2 du meme arc
 
for(int i = CorrespondanceLignesArc; i < CorrespondanceLignes ; i++)
{
getline(fichier, chaine);
istringstream t(chaine);
t.clear();
t.str(chaine);
t >> setprecision (20) >> element.forme.Objet01.numLigneG01
>> element.forme.Objet01.GCode >> element.forme.Objet01.P1.abs
>> element.forme.Objet01.P1.ord >> element.forme.Objet01.P2.abs
>> element.forme.Objet01.P2.ord;
list << element;
}
}
 
valeur = list.count();
}
 
//element.forme.Objet01.P1.abs .... abscisse du Point1 d'un trait
//element.forme.Objet01.P1.ord .... ordonnée du Point1 d'un trait
//element.forme.Objet01.P2.abs .... abscisse du Point2 d'un trait
//element.forme.Objet01.P2.ord .... ordonnée du Point2 d'un trait
J'utilise beaucoup les librairie Qt4 donc je voulais trier ma liste avec qSort où d'ailleurs avec autre chose ce n'est pas forcément le soucis.
Mes structures sont un peu lourdes car je traite des fichier de type autocad (.dxf) et qu'il est important pour moi de conserver suffisamment de données pour que mes résultats soient exploitables une fois les tris réalisés.
Le soucis est qu'avec la liste que je manipule, je n'arrive pas à poser les bonnes conditions pour trier les coordonnées de manière à reconstituer les formes fermées de mon image.

Voilà donc j'aurai souhaité un petit peu d'aide SVP. J'espère que j'ai été suffisamment claire sinon je m'en excuse
Merci d'avance.