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

Bibliothèques, systèmes et outils C Discussion :

Librairie célébre qui ne fonctionne pas


Sujet :

Bibliothèques, systèmes et outils C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par défaut Librairie célébre qui ne fonctionne pas
    Bonjour,
    J'ai tester une librairie célébre pour trianguler , ca ne fonctionne pas !

    La librairie se télécharge https://www.cs.cmu.edu/~quake/triangle.html

    Le bug : ca crash !
    J'ai enlever les segment list , pas de crash mais aucun triangle généré.

    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
     
    #include <Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    #define REAL float
    #define SINGLE
     
     
    #include <triangle.h>
     
     
    extern "C" void triangulate(char*, struct triangulateio*, struct triangulateio*,
        struct triangulateio*);
    extern "C"  void trifree(VOID* memptr);
     
    int main()
    {
        {
            int ki;
            struct triangulateio in, out, vornout;
            memset(&out, 0, sizeof(struct triangulateio));
            memset(&in, 0, sizeof(struct triangulateio));
            memset(&vornout, 0, sizeof(struct triangulateio));
            /* Allocation des structures */
            in.numberofpoints = 4;
            in.pointlist = (float*)malloc(in.numberofpoints * 2 * sizeof(float));
     
            /* Coordonnées des points */
            in.pointlist[0] = 0.0; in.pointlist[1] = 0.0;
            in.pointlist[2] = 1.0; in.pointlist[3] = 0.0;
            in.pointlist[4] = 1.0; in.pointlist[5] = 1.0;
            in.pointlist[6] = 0.0; in.pointlist[7] = 1.0;
     
            in.numberofsegments = 0;
            in.numberofholes = 0;
     
            in.numberofsegments = 4;
            in.segmentlist = (int*)malloc(in.numberofsegments * 2 * sizeof(int));
     
            in.segmentlist[0] = 0; in.segmentlist[1] = 1;
            in.segmentlist[2] = 1; in.segmentlist[3] = 2;
            in.segmentlist[4] = 2; in.segmentlist[5] = 3;
            in.segmentlist[6] = 3; in.segmentlist[7] = 0;
     
            /* Exécuter la triangulation */
            triangulate((char*)"pqD", &in, &out, NULL);
     
            printf("Triangles générés :\n");
            for (int i = 0; i < out.numberoftriangles; i++) {
                printf("Triangle %d: %d %d %d\n", i,
                    out.trianglelist[i * 3],
                    out.trianglelist[i * 3 + 1],
                    out.trianglelist[i * 3 + 2]);
            }
            ki = 0;
        }
    }
    Merci de me dire si c'est la librairie ou le source ,
    si c'est le source qu'est ce qui ne va pas.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Je ne connais pas les différents algorithmes de triangulation utilisés mais par curiosité je suis allé jeter un oeil à cette bibliothèque.

    Pour quelle soit fonctionnelle il faut correctement initialiser les deux variables in/out. C'est à dire affecter les bonnes valeurs à TOUTES les variables que comporte la structure triangulateio.

    J'ai repris ton code source et l'ai modifié pour le rendre fonctionnel. Cependant il y a deux warnings en sortie liés à l'initialisation des segments. Je te laisserai le soin de votre cette problématique .

    Le code source :
    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
    struct triangulateio in, out;
     
        // Initialisation des structures d'entrée et de sortie
        in.numberofpoints = 4;
        in.numberofpointattributes = 0;
        in.pointlist = (REAL *) malloc(in.numberofpoints * 2 * sizeof(REAL));
        in.pointmarkerlist = NULL;
        in.numberofsegments = 4;
        in.numberofholes = 0;
        in.numberofregions = 0;
        in.segmentlist = (int*)malloc(in.numberofsegments * 2 * sizeof(int));
        in.segmentmarkerlist = NULL;
        in.holelist = NULL;
        in.regionlist = NULL;
     
        out.pointlist = NULL;
        out.pointmarkerlist = NULL;
        out.trianglelist = NULL;
        out.triangleattributelist = NULL;
        out.neighborlist = NULL;
        out.segmentlist = NULL;
        out.segmentmarkerlist = NULL;
        out.edgelist = NULL;
        out.edgemarkerlist = NULL;
     
        // Définition des points d'entrée
        in.pointlist[0] = 0.0; in.pointlist[1] = 0.0;
        in.pointlist[2] = 1.0; in.pointlist[3] = 0.0;
        in.pointlist[4] = 1.0; in.pointlist[5] = 1.0;
        in.pointlist[6] = 0.0; in.pointlist[7] = 1.0;
     
        in.segmentlist[0] = 0; in.segmentlist[1] = 1;
        in.segmentlist[2] = 1; in.segmentlist[3] = 2;
        in.segmentlist[4] = 2; in.segmentlist[5] = 3;
        in.segmentlist[6] = 3; in.segmentlist[7] = 0;
     
        // Appel de la fonction de triangulation
        triangulate("pqD", &in, &out, NULL);
     
        // Affichage des résultats
        printf ("out.numberoftriangles : %d\n", out.numberoftriangles);
        printf ("out.numberofsegments : %d\n", out.numberofsegments);
     
        for (int i = 0; i < out.numberoftriangles; i++) {
            printf("Triangle %d: (%d, %d, %d)\n", i,
                   out.trianglelist[i * 3],
                   out.trianglelist[i * 3 + 1],
                   out.trianglelist[i * 3 + 2]);
        }
     
        // Libération mémoire
        trifree(in.pointlist);
        trifree(in.segmentlist);
        trifree(out.pointlist);
        trifree(out.trianglelist);
        trifree(out.segmentlist);
    La sortie en console :
    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
    Constructing Delaunay triangulation by divide-and-conquer method.
    Delaunay milliseconds:  0
    Recovering segments in Delaunay triangulation.
    Warning:  Invalid first endpoint of segment 1 in input.
    Warning:  Invalid second endpoint of segment 4 in input.
    Segment milliseconds:  0
    Removing unwanted triangles.
    Hole milliseconds:  0
    Quality milliseconds:  0
    
    Writing vertices.
    Writing triangles.
    Writing segments.
    
    Output milliseconds:  0
    Total running milliseconds:  0
    
    Statistics:
    
      Input vertices: 4
      Input segments: 4
      Input holes: 0
    
      Mesh vertices: 0
      Mesh triangles: 0
      Mesh edges: 0
      Mesh exterior boundary edges: 0
      Mesh interior boundary edges: 0
      Mesh subsegments (constrained edges): 0
    
    out.numberoftriangles : 0
    out.numberofsegments : 0
    Une dernière remarque : en remplaçant l'option "p" par l'option "z" le code donne un résultat sans warning cette fois :
    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
    Constructing Delaunay triangulation by divide-and-conquer method.
    Delaunay milliseconds:  0
    Segment milliseconds:  0
    Adding Steiner points to enforce quality.
    Quality milliseconds:  0
     
    Writing vertices.
    Writing triangles.
     
    Output milliseconds:  0
    Total running milliseconds:  0
     
    Statistics:
     
      Input vertices: 4
     
      Mesh vertices: 4
      Mesh triangles: 2
      Mesh edges: 5
      Mesh exterior boundary edges: 4
     
    out.numberoftriangles : 2
    out.numberofsegments : 4
    Triangle 0: (3, 0, 1)
    Triangle 1: (1, 2, 3)

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par défaut
    OK merci beaucoup.
    J'emploie maintenant comme argument "pzAens" et cela semble fonctionner ,
    Il vaut mieux employer des segments.

    La librairie est capricieuse, car par exemple si l'on ne met pas la valeur de début à la fin de la liste des segments, alors il n'y a pas de triangulation.
    Si la liste des segments est mal définit alors crash.

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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