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 :

[gridfit] Masquer les 4 coins d'une représentation 3D


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 9
    Points
    9
    Par défaut [gridfit] Masquer les 4 coins d'une représentation 3D
    Bonjour,
    J'ai créée une bathymétrie en 3 dimensions. L'output est sous format rectangulaire quelque soit la répartition des données utilisées (dans mon cas ils sont en losange. Comment faire pour masquer les 4 coins qui ne font pas partie de ma zone d'étude.

    le code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a=load('myfile.txt');
    x=a(:,1);
    y=a(:,2);
    z=a(:,3);
    X=(min(x):1:max(x));
    Y=(min(y):1:max(y));
    g=gridfit(x,y,z,X,Y);
    figure
    colormap(hsv(256))
    surf(X,Y,g);
    camlight right;
    lighting phong;
    shading interp
    axis ([min(x) max(x) min(y) max(y) min(z) max(z)]);
    PS : En pièce jointe l'output en question

    Please Help
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Si ton domaine est bien un losange régulier, tu peux appliquer une transformation losange <=> rectangle sur ton domaine avant de faire l'interpolation puis la transformation inverse avant l'affichage, non ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    il n'est pas tout a fait régulier mais je vais quand même essayer de voir ce que ça donne

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Finalement j'y suis pas arrivée
    J'ai fini par couper mon domaine sous format rectangulaire, le visuel est mieux mais bon...j'ai du enlever pas mal de données.
    Images attachées Images attachées  

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par leelooR Voir le message
    Finalement j'y suis pas arrivée
    Pourrais-tu, si possible, attacher un fichier txt (dans une archive zip ou rar) avec des données pour que l'on puisse faire quelques tests ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    La taille du fichier compressé étant supérieure à 512 ko, ci-après le lien pour le télécharger :
    http://www.toofiles.com/fr/oip/docum.../bathy_02.html

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Essaie ceci :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    % Recuperation des donnees
    a = load('bathy_02.txt');
     
    % Reduction de la taille du probleme
    N = 20;
    x = a(1:N:end,1);
    y = a(1:N:end,2);
    z = a(1:N:end,3);
     
    % Identification des 4 sommets du losange
    [idx,idx] = min(x);
    A = [x(idx) y(idx)];
    [idx,idx] = min(y);
    B = [x(idx) y(idx)];
    [idx,idx] = max(x);
    C = [x(idx) y(idx)];
    [idx,idx] = max(y);
    D = [x(idx) y(idx)];
     
    TS = [A ; B ; C ; D];
     
    % Centrage des coordonnees sur le sommet A
    TS(:,1) = TS(:,1)-A(1);
    TS(:,2) = TS(:,2)-A(2);
     
    % Coordonnees des sommets du carre unitaire
    US = [0 0 ; 1 0 ; 1 1 ; 0 1];
     
    % Calcul de la matrice de transformation
    K = US\TS;
     
    % Application de la transformation aux points d'origine
    xyz = [x(:)-A(1) y(:)-A(2) z(:)];
    xyz(:,1:2) = xyz(:,1:2)/K;
     
    % Interpolation des valeurs dans le domaine carré
    X = linspace(min(xyz(:,1)),max(xyz(:,1)),100);
    Y = linspace(min(xyz(:,2)),max(xyz(:,2)),100);
     
    g = gridfit(xyz(:,1),xyz(:,2),xyz(:,3),X,Y);
     
    % Application de la transformation inverse aux point d'interpolation
    [XX,YY] = meshgrid(X,Y);
     
    XYT = [XX(:) YY(:)]*K;
    XYT(:,1) = XYT(:,1)+A(1);
    XYT(:,2) = XYT(:,2)+A(2);
     
    XX(:) = XYT(:,1);
    YY(:) = XYT(:,2);
     
    % Trace du résultat
    figure
    % plot3(x,y,z,'r+')
    % hold on
    colormap(hsv(256))
    surf(XX,YY,g);
    camlight right;
    lighting phong;
    shading interp
    axis tight
    C'est l'idée qui compte ici

    Bien entendu, en fonction de la précision souhaitée sur les résultats en sortie, il faudra se pencher sur les erreurs dues par exemple à la transformation (car la définition du losange n'est pas parfaite).
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Excellente idée!!!
    Merci Dut

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par Dut Voir le message
    il faudra se pencher sur les erreurs dues par exemple à la transformation (car la définition du losange n'est pas parfaite).
    Pour illustrer mon propos, on peut appliquer la matrice de transformation aux sommets du losange dans l'espace carré pour voir si on retombe sur les même points sur le losange initiale :

    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
    % Identification des 4 sommets du losange
    [idx,idx] = min(x);
    A = [x(idx) y(idx)];
    [idx,idx] = min(y);
    B = [x(idx) y(idx)];
    [idx,idx] = max(x);
    C = [x(idx) y(idx)];
    [idx,idx] = max(y);
    D = [x(idx) y(idx)];
     
    TS = [A ; B ; C ; D];
     
    % Centrage des coordonnees sur le sommet A
    TS(:,1) = TS(:,1)-A(1);
    TS(:,2) = TS(:,2)-A(2);
     
    % Coordonnees des sommets du carre unitaire
    US = [0 0 ; 1 0 ; 1 1 ; 0 1];
     
    % Calcul de la matrice de transformation
    K = US\TS;
     
    % Verification de la précision de la matrice de transformation
    TS2 = US*K;
    La différence donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >> TS-TS2
     
    ans =
     
             0         0
       -3.3333   -3.6667
        3.3333    3.6667
       -3.3333   -3.6667
    Ce qui donne en pourcentage d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >> 100*(TS-TS2)./TS
     
    ans =
     
           NaN       NaN
       -0.5160    0.3981
        0.2388   -2.7363
       -0.4505   -0.4725
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Masquer les 0 résultant d'une formule
    Par scoubi10 dans le forum Excel
    Réponses: 2
    Dernier message: 16/09/2010, 15h52
  2. masquer les tables system d'une base de donnée
    Par sisi87 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/10/2009, 21h12
  3. controler independament les 4 coins d'une image
    Par hr.loxx dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 08/02/2008, 14h53
  4. [Pygame]Supprimer/masquer les pixels d'une même couleur sur une image
    Par Mysti¢ dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 10/05/2007, 13h40
  5. masquer les lignes dans une zone si une cellule de la ligne est vide
    Par keguira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2006, 18h21

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