Salut tous,
j'ai un arrangement de données pas facile à faire (pour moi en tout cas) et je ne sais pas trop comment m'y prendre. Du coup, j'aurais aimé avoir votre avis sur la manière de m'y prendre et avoir un petit coup de pouce sur un certain point.
Contexte :
je fais un programme matlab pour convertir des données d'un logiciel pour qu'elles soient lisibles par un autre logiciel.
Ces données sont des formes géométriques, il y a donc des points, des connections entre points, des type de formes...
syntaxe des points : pas de soucis
Structure fichier logiciel n°1 :
dans mon fichier de départ les points sont définis comme ceci:
par exemple, si j'ai 3points je vais avoir ceci (j'ai mis des coordonnées comprises en 0 et 1 renseignées au pif):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3numeroPoint coordonnéeX coordonnéeY coordonnéeZ ... numeroPoint coordonnéeX coordonnéeY coordonnéeZ
Structure fichier logiciel n°2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1 0.1 0.2 0.3 2 0 0 0 3 0.5 0.9 0.8
mon fichier de sortie doit ressembler à ceci:
on voit que c'est similaire à part que l'on ne met pas le numero du point en début de ligne. En fait c'est le logiciel qui fait ceci automatiquement en interne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0.1 0.2 0.3 0 0 0 0.5 0.9 0.8
=> la première ligne correspond au point n°0, la 2eme au point n°1 ...
(il y a un décale car ce logiciel commence à 0 et l'autre à 1)
syntaxe des formes : les problèmes vont être sur cette partie
Structure fichier logiciel n°1 :
le logiciel numéro 1 relis les points pour former différentes formes et il fait comme ceci:
on met le numero de la forme et on met les points qui doivent être en connection pour faire la forme. Par exemple, ci dessus j'ai fais un triangle en reliant les points1,2,3 et un carré avec les points 88,77,12,2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3numeroForme1 point1 Point3 Point2 ... numeroForme2 point88 Point77 Point12 Point2
concretement voici ce que ça donne si je n'ai que deux formes comme montré ci dessus:
Structure fichier logiciel n°2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 1 1 3 2 2 88 77 12 2
pour le fichier du logiciel numero 2 je dois faire la meme chose mais comme il y a un décalage dans les numéros de points (et qu'il n'y a pas le numero de la forme à donner au depart) ça donne pour pour la traduction des formes que j'ai mis au dessus avec le logiciel numero 1:
mon premier programme qui marche bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 0 2 1 87 76 11 1
jusqu'à là pas de soucis:
=> pour les réecrire les points j'ai stockés tous les points données par le logiciel numero 1 et je n'ai réécris que les coordonnées pour avoir la bonne syntaxe du logiciel numero 2.
=> pour faire les formes j'ai pris lu toutes les données du 1er fichier et je les ai stockées. Ensuite j'ai réecris tous les lignes avec la syntaxe du 2eme logiciel (donc sans le numero de forme) et en enlevant "1" à tous les numero de points (car la notation commence à 0 avec ce logiciel).
probleme !!!!!!
tout ceci marche bien lorsque le premier logiciel me numero les points dans l'ordre 1,2,3,4,5,6....
en fait il arrive de temps en temps (quand l'utilisateur a bidouillé des choses en passant par l'interface graphique du logiciel) que le logiciel 1 "loupe" des numéros de points.
je m'explique, si je fais 8 points je devrais avoir un truc dans ce genre:
(on voit que les numero de points vont de 1 à 8)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1 0.1 0.2 0.3 2 0.4 0.6 0.7 3 0.5 0.4 0.7 4 0.5 0.2 0.1 5 0.1 0.2 0.3 6 0.4 0.6 0.7 7 0.5 0.4 0.7 8 0.5 0.2 0.1
or si l'utilsateur à bidouillé on risque d'avoir ceci:
la numerotation des points n'a pas été prise en compte de 3 à 5 et de 9 à 11, du coup, au lieu de s'arreter à la numerotation à 8 il s'arrete à 14 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1 0.1 0.2 0.3 2 0.4 0.6 0.7 6 0.5 0.4 0.7 7 0.5 0.2 0.1 8 0.1 0.2 0.3 12 0.4 0.6 0.7 13 0.5 0.4 0.7 14 0.5 0.2 0.1
conséquences:
1°) avec mon programme il n'y a pas de problèmes dans la première par tie où je copie les coordonnées de points
2°) par contre dans la définition des formes ça change beaucoup car dans mon programme je recopie exatement les numero de points données par le logiciel 1 et j'y retranche "1".
du coup dans l'exemple donnée ci dessus pour le logiciel numero 2 je vais faire appels aux points (j'ai retranché 1 pour respecter le depart à 0) :
mais les points 11 12 13 n'existe pas pour lui puisque lui n'a que 8 points en mémoire : 0,1,2,3,4,5,6,7
Code : Sélectionner tout - Visualiser dans une fenêtre à part 0,1,5,6,7,11,12,13
et en plus il va faire des formes qui seront mal reliées puisque le premier logiciel à pas fait la numerotation dans le bon ordre...
Question:
en fait il faudrait que je "detecte" quand le premier logiciel à sauté dans sa numérotation et que je repère quels sont les nombres qui ont sautés.
ensuite il faudrait que j'arrive à prendre sa en compte dans les connections de forme.
=> voyez vous comment faire ceci car je sèche complétement
Partager