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

 C Discussion :

Calcul des normales


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Calcul des normales
    salut à tout le monde
    je suis un eleve ingenieur et je suis en terminale
    mon pfe s'agit de la reconstruction en 3D avec marching cubes
    voilà mon probleme:
    on dispose de deux fichier nommés vertex et surface
    les deux fichiers sont des matrices à 3 colonnes;en effet dans le premier(vertex) on trouve les coordonnées des vertex et dans le deuxieme on trrouves les vertex quicompose la surface
    il faut calculer la normale à chaque surface (calculer le produit vectoriel à partir des vertex) en suite calculer la normaale de chaque surface qui est la sommes des normales des surfaces.
    j'ai charger les deux ficher dans deux listes mais je trouve pa comment faire pour le reste si quelqu'un peut m'aider...j'ai un retard de plus d'un moi pour mon pfe alors svp aidez moi!!!!!!!!!
    PSt voici mon code:

    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
     
    struct vertex {
       float x,y,z;
       };
     
     
    struct srface { 
        vertex a,b,c;
      };
     
     
    surface node {
        surface *s;
        surface node *next;
    	}
     
     
    vertex node {
       vertex *v;
       vertex node *next;
       };
     
     
    vertex node *load vertex (char *f)
        {FILE *fopen(f);
    	float x,y,z;
    	char *line : vertex node *old=NULL;
    	while ((line=fget(f))!NULL)
    	{ fscanf (%f %f %f, &x ,&y ,&z);
    	vertax v=(vertex)malloc(sizeof(vertex));
    	v->x=x;
    	v->y=y;
    	v->z)z;
    	vertex node n=(vertex node)malloc(sizeof(vertex));
    	n->v=v;
    	n->next=old;
    	};
     
     
    surface node *load surface (char *f)
     {FILE *fopen(f);
     float a,b,c;
     char line:surface node *old=NULL;
     while ((line=fget(f))!NULL)
      {fscanf(%f %f %f,&a,&b,&c);
       surface s=(surface)malloc(sizeof(surface));
       s->a=a;
       s->b=b;
       s->c=c;
       surface node n=(surface node)malloc(sizeof(surface));
       n->s=s;
       n->next=old;
       };
    alors comment faire pour le reste?

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Bonjour et bienvenue sur les forums de DVP

    j'ai charger les deux ficher dans deux listes mais je trouve pa comment faire pour le reste si quelqu'un peut m'aider
    Si il s'agit du code qui suit, ce n'est pas encore fait! Ce code ne compile pas et comporte des erreurs de syntaxe monstrueuses.

    alors comment faire pour le reste?
    - Commencer par corriger le code qui précède, les messages d'erreurs et d'avertissement du compilateur t'aideront, et tu apprendras des choses.
    - Ouvrir... un bouquin de C.

    Si il reste des questions obscures, alors poses-les ensuite.

    Cordialement
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    je sais que je suis nule en C et c'est pour quoi je demande de l'aide!!!la lecture d'un bouquin va prendre du temps sans compter le temps des essayes alors acceptez vous de m'aider ?je serais trés reconnaissant.merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je suppose qu'on n'en est pas à un projet de fin d'études en C sans l'avoir un peu étudié avant. Au vu des erreurs que tu commets dans ton code, il va falloir que tu y mettes sérieusement du tien, car personne ici ne fera ton projet à ta place.

    On ne peut pas non plus faire un cours complet sur le C sur le forum.

    Alors, compile le code que tu as montré, regarde les erreurs du compilateur, essaye de les comprendre et de les corriger. Si certaines te sont incompréhensibles, alors poste une question.

    Pour ne pas paraitre trop sévère, je commence à la première erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct srface { 
        vertex a,b,c;
      };
    Qu'est-ce qu'est vertex ?
    On connait un struct vertex, pas un vertex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct srface { 
        struct vertex a,b,c;
      };
    Bonne continuation.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre habitué Avatar de sardik
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Points : 143
    Points
    143
    Par défaut
    Bonjour,
    Expose clairement tes problèmes... C'est un forum d'aide, pas un forum où on fait les projets à la place des gens

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci sardik

    en effet le passage en C n'est juste qu'un passage transitoire pour valider le prgramme et aprés je dois refaire le code en VHDL pour l'implementer sur un FPGA

    en plus je ne comprend pas pour quoi le moderateur a pris ce ton avec moi???



    pour calculer la normales d'une surface on doit construire 2 vecteurs à partir des point qui constituent la surface c'est à dire
    V1.x= a.x-b.x, V2=a.x-c.x
    V1.y= a.y-b.y, V2=a.y-c.y
    V1.z= a.z-b., V2=a.z-c.z

    la normale n.x= V1.y*V2.z-V1.z*V2*.z
    n.y=-(V1.x*V2.z-V1.z*V2*.x)
    n.z=V1.x*V2.y-V1.y*V2*.x


    la normale d'un vortex nv=nv+nsurf (si le vortex appartient à la facette)

    une apperçu des deux fichier:
    surface:
    1 2 5
    6 79 98
    1 3 5
    etc...

    vertex:
    30.000000 8.007843 1.000000
    30.992157 9.000000 0.000000
    30.000000 7.992157 0.000000
    30.992157 9.000000 1.000000
    30.992157 9.000000 0.000000
    30.000000 8.007843 1.000000
    32.000000 8.007843 0.000000
    31.000000 7.992157 0.000000
    32.000000 8.007843 1.000000
    (ce sont les coordonnées des vetex )



    et en ce qui concerne la normle du vertex
    normal_vert=normal_vert+normal_surface (si le vertex appartient à la facette)

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Salut
    Citation Envoyé par monta0mac Voir le message
    en plus je ne comprend pas pour quoi le moderateur a pris ce ton avec moi???
    C'est pourtant l'un des plus gentils Et il t'a fait remarque (a juste titre) que ton code contient beaucoup d'erreurs de grand debutant. Je pense que tu t'attaques a quelque chose de trop complique au vu de tes connaissances actuelles.
    Citation Envoyé par monta0mac Voir le message
    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
    struct vertex {
       float x,y,z;
       };
       
       
    struct surface { 
        vertex a,b,c; // vertex n'est pas un type connu
      };
     
      
    surface node { //surface n'est pas un type connu
        surface *s; //surface n'est pas un type connu
        surface node *next; //surface node ne veut rien dire
    	}
    
    
    vertex node { //vertex n'est pas un type connu
       vertex *v; //vertex n'est pas un type connu
       vertex node *next; //vertex node ne veut rien dire
       };
    /* et node ne peut pas etre a la fois une surface et un vertex, sauf a utiliser une union ce qui a des implications assez lourdes */
       
       
    vertex node *load vertex (char *f) // vertex ou node ?
        {FILE *fopen(f);
    	float x,y,z;
    	char *line : vertex node *old=NULL;
    	while ((line=fget(f))!NULL)
    	{ fscanf (%f %f %f, &x ,&y ,&z);
    	vertax v=(vertex)malloc(sizeof(vertex));
    	v->x=x;
    	v->y=y;
    	v->z)z;
    	vertex node n=(vertex node)malloc(sizeof(vertex)); // vertex ou node?
    	n->v=v;
    	n->next=old;
    	};
    	
    	
    surface node *load surface (char *f) // surface ou node?
     {FILE *fopen(f);
     float a,b,c;
     char line:surface node *old=NULL; // : ?
     while ((line=fget(f))!NULL)
      {fscanf(%f %f %f,&a,&b,&c);
       surface s=(surface)malloc(sizeof(surface));
       s->a=a;
       s->b=b;
       s->c=c;
       surface node n=(surface node)malloc(sizeof(surface)); // surface ou node?
       n->s=s;
       n->next=old;
       };
    alors comment faire pour le reste?
    Sans mechancete et tres franchement, reprend du debut:
    Citation Envoyé par monta0mac Voir le message
    V1.x= a.x-b.x, V2=a.x-c.x
    V1.y= a.y-b.y, V2=a.y-c.y
    V1.z= a.z-b., V2=a.z-c.z
    n.x= V1.y*V2.z-V1.z*V2*.z
    n.y=-(V1.x*V2.z-V1.z*V2*.x)
    n.z=V1.x*V2.y-V1.y*V2*.x
    Commence par faire un programme qui fait ca pour une surface elementaire (3 points) avec des variables statiques. Apres, tu peux demander les coordonnees a l'utilisateur. Apres, allouer dynamiquement les variables. Apres, gerer des surfaces complexes.

Discussions similaires

  1. [2D/3D] Calcul des normales dans le vertex shader
    Par freedom144 dans le forum Qt
    Réponses: 3
    Dernier message: 23/10/2016, 01h51
  2. methode calcule des normales
    Par freon dans le forum OpenGL
    Réponses: 14
    Dernier message: 03/11/2010, 20h10
  3. Calcul des normales mais aucun changement..
    Par Daikyo dans le forum OpenGL
    Réponses: 10
    Dernier message: 30/10/2010, 01h39
  4. Problème dans le calcul des normales moyennes,
    Par MaxPayne dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/04/2005, 17h50
  5. problème de calcul des normales par sommet
    Par captainSeb dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/01/2005, 13h42

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