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 :

Maillage: recherche des points sur le contour extérieur


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Maillage: recherche des points sur le contour extérieur
    Bonjour à tous,
    J'ai besoin d'aide dans la réalisation d'un programme sous Matlab. Celui-ci permet d'abord de réaliser un maillage reliant des points créés aléatoirement. Ensuite il permet de classer les mailles créées par ordre d'aires croissantes. Enfin en créant un deuxième maillage, il permet de fusionner les deux maillages et de reclasser les aires créées toujours par ordre croissant.
    Je dois ajouter une dernière fonction sur laquelle je bloque: la détermination des points du maillage qui forme le contour extérieur du maillage. Ceux-ci sont caractérisés par le fait que les segments qui les relient n'appartiennent qu'à une seule maille.

    Voici mon fichier permettant d'éxécuter les sous-programmes:
    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
    clear all
    close all
    clear classes
    M1=maillage(7);
    M2=maillage(7);
    M1c=M1.classer;
    M2c=M2.classer;
    M1.afficher
    M2.afficher
    M1c.afficher
    M2c.afficher
    M3=M1.fusion(M2);
    M3c=M3.classer;
    M3.afficher
    M3c.afficher
    Voici mes sous-programmes:
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    classdef maillage;
        properties (SetAccess=public)
            CrdNd;
            Connex;
            nbNd;
            nbElt;
            Aires;
            segment;
        end
    
        methods;
            function obj=maillage (n)
                obj.CrdNd=rand (n,2);
                obj.Connex=delaunay (obj.CrdNd(:,1),obj.CrdNd(:,2));
                obj.nbNd=size (obj.CrdNd,1);
                obj.nbElt=size (obj.Connex,1);
                for e=1:obj.nbElt
                    N1=obj.Connex(e,1);
                    N2=obj.Connex(e,2);
                    N3=obj.Connex(e,3);
                    X1=obj.CrdNd(N1,1);
                    Y1=obj.CrdNd(N1,2);
                    X2=obj.CrdNd(N2,1);
                    Y2=obj.CrdNd(N2,2);
                    X3=obj.CrdNd(N3,1);
                    Y3=obj.CrdNd(N3,2);
                    obj.Aires(e)=1/2*abs ((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1));
                end
            end
    
            function obj=classer (obj)
                list_aires=obj.Aires;
                ordre=[1:obj.nbElt]';
                for j=obj.nbElt:-1:2;
                    for i=1:j-1;
                        if list_aires (i)>list_aires (i+1);
                            k=list_aires (i+1);
                            list_aires (i+1)=list_aires (i);
                            list_aires (i)=k;
                            k=ordre (i+1);
                            ordre (i+1)=ordre (i);
                            ordre (i)=k;
                        end
                    end
                end
                obj.Aires=list_aires;
                obj.Connex=obj.Connex(ordre,: );
            end
    
            function obj3=fusion (obj1,obj2)
                obj3.CrdNd=[obj1.CrdNd;obj2.CrdNd];
                obj3=maillage (obj1.nbNd+obj2.nbNd);
                obj3.Aires=[];
                obj3.Connex=delaunay (obj3.CrdNd(:,1),obj3.CrdNd(:,2));
                obj3.nbNd=size (obj3.CrdNd,1);
                obj3.nbElt=size (obj3.Connex,1);
                for e=1:obj3.nbElt;
                    N1=obj3.Connex(e,1);
                    N2=obj3.Connex(e,2);
                    N3=obj3.Connex(e,3);
                    X1=obj3.CrdNd(N1,1);
                    Y1=obj3.CrdNd(N1,2);
                    X2=obj3.CrdNd(N2,1);
                    Y2=obj3.CrdNd(N2,2);
                    X3=obj3.CrdNd(N3,1);
                    Y3=obj3.CrdNd(N3,2);
                    obj3.Aires(e)=(1/2)*abs ((X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1));
                end
            end
    
            function obj=afficher (obj)
                figure
                trimesh (obj.Connex,obj.CrdNd(:,1),obj.CrdNd(:,2))
                for e=1:obj.nbElt;
                    N1=obj.Connex(e,1);
                    N2=obj.Connex(e,2);
                    N3=obj.Connex(e,3);
                    X1=obj.CrdNd(N1,1);
                    Y1=obj.CrdNd(N1,2);
                    X2=obj.CrdNd(N2,1);
                    Y2=obj.CrdNd(N2,2);
                    X3=obj.CrdNd(N3,1);
                    Y3=obj.CrdNd(N3,2);
                    B=[(X1+X2+X3)/3,(Y1+Y2+Y3)/3];
                    text (B (1,1),B (1,2),num2str (e));
                end
            end
    
            function obj=noeuds_frontiere (obj)
                for e=1:obj.nbElt;
                    N1=obj.Connex(e,1);
                    N2=obj.Connex(e,2);
                    N3=obj.Connex(e,3);
                end
            end
        end
    end
    La fonction en rouge est celle que je n'arrive pas à terminer...
    Merci d'avance pour votre temps !

  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,

    une méthode serait de lister tous les segments de tes mailles et de ne conserver que les segments qui n'apparaissent qu'une seule fois.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

Discussions similaires

  1. [VB.NET] Comment rechercher des fichiers sur un disque.
    Par vijeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/08/2017, 10h17
  2. Rechercher des fichiers sur disque dur
    Par pierrot132 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/11/2007, 11h08
  3. Recherche des informations sur les décompilateurs
    Par pieroznight dans le forum Outils
    Réponses: 4
    Dernier message: 28/09/2007, 17h14
  4. Rechercher des fichiers sur son système
    Par Olivier Regnier dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 17/03/2007, 21h35
  5. Réponses: 5
    Dernier message: 27/03/2006, 23h24

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