IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

arrangement de données pas facile


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut arrangement de données pas facile
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    numeroPoint coordonnéeX coordonnéeY coordonnéeZ 
    ...
    numeroPoint coordonnéeX coordonnéeY coordonnéeZ
    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
    3
    4
     
    1 0.1 0.2 0.3
    2 0 0 0
    3 0.5 0.9 0.8
    Structure fichier logiciel n°2:
    mon fichier de sortie doit ressembler à ceci:
    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
    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:
    => 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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    numeroForme1 point1 Point3 Point2 
    ...
    numeroForme2 point88 Point77 Point12 Point2
    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.

    concretement voici ce que ça donne si je n'ai que deux formes comme montré ci dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1 1 3 2 
    2 88 77 12 2
    Structure fichier logiciel n°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
    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:
    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
    (on voit que les numero de points vont de 1 à 8)
    or si l'utilsateur à bidouillé on risque d'avoir ceci:
    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
    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 !

    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
    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

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Il te suffit de construire un vecteur qui te permet de repasser de l'ancienne numérotation à la nouvelle.

    Ex :
    si tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    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
    Tu veux que cela devienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    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
    Tu construis alors un vecteur qui dépend de cette numérotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A = [1 2 6 7 8 12 13 14];
    B(A) = 1:8;
    B contient les indices pour le nouveau système en fonction des données d'origine.

    Ainsi, si cherches les points 1,2,6,7,8,12,13,14, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> B([1,2,6,7,8,12,13,14])
     
    ans =
     
         1     2     3     4     5     6     7     8
    Et éventuellement de soustraire 1 pour commencer la numérotation à 0.
    Ce n'est pas compliqué à généraliser pour un tableau de point plus grand

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    ouahou
    super Magelan, j'ai compris le principe...

    par contre techniquement, j'ai pas trop compris ce B(A) comment il fonctionne...

    quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=[1 2 30 56 45 89 63 52]
    j'ai un vecteur A, pas de soucis,

    ensuite pourquoi faire :
    et pas ça ?
    il y a un truc qui m'echappe, ça revient pas au meme ce que je dis ?

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Non,

    regarde l'exemple que j'ai donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> A = [1 2 6 7 8 12 13 14];
    >> B(A) = 1:8
     
    B =
     
      Columns 1 through 9
     
         1     2     0     0     0     3     4     5     0
     
      Columns 10 through 14
     
         0     0     6     7     8
    Donc grâce à B, cela permet de savoir que lorsqu'un point était numéroté 6 dans l'ancienne numérotation, il devient B(6)=3 dans la nouvelle.

    Si tu écrivais directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> B=1:8
     
    B =
     
         1     2     3     4     5     6     7     8
    tu n'aurais pas cette correspondance.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    super merci, j'ai compris
    merci encore
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Concaténation ne donne pas le résultat attendu
    Par artotal dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2006, 01h37
  2. Réponses: 11
    Dernier message: 04/05/2006, 11h50
  3. un petit histogramme pas facile
    Par Bibouda dans le forum C
    Réponses: 15
    Dernier message: 23/11/2005, 21h17
  4. ensemble de données pas en mode edition
    Par XloX dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/06/2005, 12h17
  5. Rnd qui ne donne pas que des bonnes valeurs
    Par kubito dans le forum Access
    Réponses: 2
    Dernier message: 08/10/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo