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

Mathématiques Discussion :

Indice de courbure (z=f(x,y) "polynôme de second degré")


Sujet :

Mathématiques

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Indice de courbure (z=f(x,y) "polynôme de second degré")
    Bonjour,
    Je dispose d'un nombre de courbes en 3D et leur polynôme de second degré correspondant (z= f(x,y) = 13091.6498 - 433.0595*x - 232.7672*y + 3.5944*x^2 + 1.0273*y^2 + 3.8488*x*y)
    Et, je devrai chercher un indice de courbure et je ne sais pas comment procéder à le retrouver.
    Quelqu'un pourra m'aider en proposant une piste ou un lien expliquant la démarche à suivre ou l'algorithme à implanter?
    Merci beaucoup,
    Cordialement,
    Maroua

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par maroua_ Voir le message
    Quelqu'un pourra m'aider en proposant une piste ou un lien expliquant la démarche à suivre ou l'algorithme à implanter?
    wikipedia : curvature

    For a plane curve given parametrically in Cartesian coordinates as z(t) = (x(t),y(t)), the curvature is



    where primes refer to derivatives with respect to parameter t.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Excusez moi mais je n'ai pas bien compris laformule
    moi j'ai un polynôme de second degré
    z= f(x,y)=13091.6498 - 433.0595*x - 232.7672*y + 3.5944*x^2 + 1.0273*y^2 + 3.8488*x*y
    Comment pourrais-je faire la dérivée première x' et y' et la dérivée seconde x'' et y"dans la formule
    Merci

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par maroua_ Voir le message
    Excusez moi mais je n'ai pas bien compris laformule
    moi j'ai un polynôme de second degré
    z= f(x,y)=13091.6498 - 433.0595*x - 232.7672*y + 3.5944*x^2 + 1.0273*y^2 + 3.8488*x*y
    Comment pourrais-je faire la dérivée première x' et y' et la dérivée seconde x'' et y"dans la formule
    Merci
    Oups. C'est de ma faute, j'ai lu trop vite ta question. Je pensais que c'était une courbe paramétrique.

    En fait, ta formule est celle d'une carte d'élévation : altitude=f(x,y).

    Dans ce cas, je suppose que tu cherches la courbure de gauss. On en a déjà parlé dans le forum, je pense. Il faut passer par une approximation de Pythagore : ds²=dx²+dy²+dz², ou "ds" représente la longueur d'un petit déplacement sur x/y/z.

    Ca doit nous amener a une formule du genre (sauf erreur):

    K = (Fxx.Fyy - Fxy²) / (1+Fx²+Fy²)²

    Ou Fx, Fy sont les dérivées partielles d'ordre 1 de F()
    Et Fxx, Fyy, Fxy sont les dérivées partielles d'ordre 2 de F()


    EDIT : le lien sur wikipedia : Gaussian curvature
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    J'ai besoin de quantifier la courbure en une valeur (constante) afin de comparer plusieurs courbures, et si j'utilise Gaussian curvature, j'aurais une fonction en fonction de x et y, ce qui ne m'saurais pas utile.
    Donc je pensais à utilser l'opérateur géométrique MLVV en 3D puisque je dispose des points 3D de la courbe z=f(x,y), j'ai vu que cet opérateur calcule la courbure moyenne.
    Qu'elqu'un pourrait s'il vous plait me donner plus d'explication sur le fonctionnement de cet opérateur ou un lien qui me serait utile ?
    Merci

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par maroua_ Voir le message
    Donc je pensais à utilser l'opérateur géométrique MLVV en 3D puisque je dispose des points 3D de la courbe z=f(x,y), j'ai vu que cet opérateur calcule la courbure moyenne.
    Il me semble que l'opérateur MLVV calcule la courbure moyenne en un point (x,y,z). Tout comme la courbure de Gauss, en fait.

    Je ne vois pas trop comment on pourrait calculer une seule valeur de courbure qui caractériserait toute une surface 3D.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Indice de courbure (z=f(x,y) "polynôme de second degré")
    Bonjour,
    Je dispose d'un fichier txt qui contient mes points 3D (x,y,z) qui constituent un polynôme de second degré z=f(x,y) et je voulais avoir la moyenne de courbure d'une courbe et j'ai trouvé la fonction [K,H,Pmax,Pmin] = surfature(X,Y,Z) dont le code ci-dessous,
    Mais je n'ai pas compris comment introduire mes inputs étant donné que l'auteur de cette fonction dit que "X,Y,Z ARE 2D ARRAYS OF POINTS ON THE SURFACE", ce que je n'ai pas compris.
    Et ,j'obtient comme résultat NaN.
    Quel qu'un pourrai m'aider s'il vous plaît et m'expliquer ce que je devrais mettre comme entrée?
    Merci beaucoup
    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
     
    tablecentersleft = load ('.txt', '-ascii');
    dimtablecentersleft = size(tablecentersleft);
    nbrlignestablecentersleft = dimtablecentersleft(1,1);
    xic=[];
    yic=[];
    zic=[];
    xicyic=[];
    for jj=1:nbrlignestablecentersleft
            xic = [xic;tablecentersleft(jj,1)];
            yic = [yic;tablecentersleft(jj,2)];
            zic = [zic;tablecentersleft(jj,3)];
    end;
     
    [Xf] = MESHGRID(xi);
    [Yf] = MESHGRID(yi);
    [Zf] = MESHGRID(zi);
     
    [K,H,Pmax,Pmin] = surfature(Xi,Yf,Zf)

    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
     
    function [K,H,Pmax,Pmin] = surfature(X,Y,Z),
    % SURFATURE -  COMPUTE GAUSSIAN AND MEAN CURVATURES OF A SURFACE
    %   [K,H] = SURFATURE(X,Y,Z), WHERE X,Y,Z ARE 2D ARRAYS OF POINTS ON THE
    %   SURFACE.  K AND H ARE THE GAUSSIAN AND MEAN CURVATURES, RESPECTIVELY.
    %   SURFATURE RETURNS 2 ADDITIONAL ARGUEMENTS,
    %   [K,H,Pmax,Pmin] = SURFATURE(...), WHERE Pmax AND Pmin ARE THE MINIMUM
    %   AND MAXIMUM CURVATURES AT EACH POINT, RESPECTIVELY.
     
     
    % First Derivatives
    [Xu,Xv] = gradient(X);
    [Yu,Yv] = gradient(Y);
    [Zu,Zv] = gradient(Z);
     
    % Second Derivatives
    [Xuu,Xuv] = gradient(Xu);
    [Yuu,Yuv] = gradient(Yu);
    [Zuu,Zuv] = gradient(Zu);
     
    [Xuv,Xvv] = gradient(Xv);
    [Yuv,Yvv] = gradient(Yv);
    [Zuv,Zvv] = gradient(Zv);
     
    % Reshape 2D Arrays into Vectors
    Xu = Xu(:);   Yu = Yu(:);   Zu = Zu(:); 
    Xv = Xv(:);   Yv = Yv(:);   Zv = Zv(:); 
    Xuu = Xuu(:); Yuu = Yuu(:); Zuu = Zuu(:); 
    Xuv = Xuv(:); Yuv = Yuv(:); Zuv = Zuv(:); 
    Xvv = Xvv(:); Yvv = Yvv(:); Zvv = Zvv(:); 
     
    Xu          =   [Xu Yu Zu];
    Xv          =   [Xv Yv Zv];
    Xuu         =   [Xuu Yuu Zuu];
    Xuv         =   [Xuv Yuv Zuv];
    Xvv         =   [Xvv Yvv Zvv];
     
    % First fundamental Coeffecients of the surface (E,F,G)
    E           =   dot(Xu,Xu,2);
    F           =   dot(Xu,Xv,2);
    G           =   dot(Xv,Xv,2);
     
    m           =   cross(Xu,Xv,2);
    p           =   sqrt(dot(m,m,2));
    n           =   m./[p p p]; 
     
    % Second fundamental Coeffecients of the surface (L,M,N)
    L           =   dot(Xuu,n,2);
    M           =   dot(Xuv,n,2);
    N           =   dot(Xvv,n,2);
     
    [s,t] = size(Z);
     
    % Gaussian Curvature
    K = (L.*N - M.^2)./(E.*G - F.^2);
    K = reshape(K,s,t);
     
    % Mean Curvature
    H = (E.*N + G.*L - 2.*F.*M)./(2*(E.*G - F.^2));
    H = reshape(H,s,t);
     
    % Principal Curvatures
    Pmax = H + sqrt(H.^2 - K);
    Pmin = H - sqrt(H.^2 - K);

  8. #8
    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,

    pour utiliser cette fonction, tes données doivent être réparties sur une grille régulière, est-ce le cas?

    pourrais-tu nous donner un jeu de test de tes données de points? par exemple le fichier txt que tu utilises?
    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.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Ci-joint les coordonnées de mes points 3D enregistrés dans .txt
    63.125 6.125 41
    62 8 39
    61.125 9.75 37
    60.1111 11.3333 35
    59.125 13.125 33
    58 15 31
    56.875 16.875 29
    55.8889 18.4444 27
    54.875 19.875 25
    53.7143 21.8571 23
    52.125 23.75 21
    51 25.5 19
    50 28 17
    48.7143 29.8571 15
    48.1667 31.9167 13
    Merci

  10. #10
    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
    C'est la totalité des points? car ces points permettent de tracer une courbe et non une surface...
    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.

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Oui tu as tout à fait raison, je suis désolée je me suis trompée
    J'ai essayé plusieurs fonctions pour récupérer l'indice de courbure
    Mais à chaque fois il me sort NaN
    Ci dessous le code d'une fonction qui calcule la moyenne de courbure et le même problème
    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
     
    function [gm samc] = mcurvature_vec(x,y,z)
    % Description: The function calculates mean curvature and 
    % Surface Avg Mean Curvature (SAMC) of a surface formed by x, y & z. 
    % The input are the coordinate matrices x, y & z. The 
    % matrices can be formed using meshgrid or similar functions.
    % This code is a vectorized form of original code (mcurvature) posted 
    % on Matlab File Exchange.
     
    % The mean curvature is calculated according to the formula:
     
    % If x:U->R^3 is a regular patch, then the mean curvature is given by
    %       
    %         H = (eG-2fF+gE)/(2(EG-F^2)),	
    % 
    % where E, F, and G are coefficients of the first fundamental form and
    % e, f, and g are coefficients of the second fundamental form 
     
    % Reference: Gray, A. "The Gaussian and Mean Curvatures." §16.5 in 
    % Modern Differential Geometry of Curves and Surfaces with Mathematica, 
    % 2nd ed. Boca Raton, FL: CRC Press, pp. 373-380, 1997 (p. 377).
     
    % Inspired by:
    % Title:  	Mean Curvature
    % Author: 	Ahmed Elnaggar
    % Summary: 	Calculate the Mean curvature of a given surface (x,y,z).
     
    gm = zeros(size(z));
    [xu,xv]     =   gradient(x);
    [xuu,xuv]   =   gradient(xu);
    [xvu,xvv]   =   gradient(xv);
     
    [yu,yv]     =   gradient(y);
    [yuu,yuv]   =   gradient(yu);
    [yvu,yvv]   =   gradient(yv);
     
    [zu,zv]     =   gradient(z);
    [zuu,zuv]   =   gradient(zu);
    [zvu,zvv]   =   gradient(zv);
     
    Xu(:,:,1) = xu;
    Xu(:,:,2) = yu;
    Xu(:,:,3) = zu;
     
    Xv(:,:,1) = xv;
    Xv(:,:,2) = yv;
    Xv(:,:,3) = zv;
     
    Xuu(:,:,1) = xuu;
    Xuu(:,:,2) = yuu;
    Xuu(:,:,3) = zuu;
     
    Xuv(:,:,1) = xuv;
    Xuv(:,:,2) = yuv;
    Xuv(:,:,3) = zuv;
     
    Xvv(:,:,1) = xvv;
    Xvv(:,:,2) = yvv;
    Xvv(:,:,3) = zvv;
     
    E = dot(Xu,Xu,3);
    F           =   dot(Xu,Xv,3);
    G           =   dot(Xv,Xv,3);
    m           =   cross(Xu,Xv,3);
    temp(:,:,1) = sqrt(sum(m.*m,3));
    temp(:,:,2) = temp(:,:,1);
    temp(:,:,3) = temp(:,:,1);
    n           =   m./temp;
    L           =   dot(Xuu,n,3);
    M           =   dot(Xuv,n,3);
    N           =   dot(Xvv,n,3);
    gm          =   ((E.*N)+(G.*L)-(2.*F.*M))./(2.*(E.*G - F.^2));
     
    dim = size(z);
    samc = 1/ (dim(1) * dim(2)) * sum (gm(:).^2);
    Merci
    Cordialement,
    Maroua

  12. #12
    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
    Pour le moment, ton problème c'est la forme de te données d'entrée. les 2 fonctions que tu montres utilise le même formalisme : x, y et z doivent être des matrices 2D, ce n'est pas le cas dans le premier code que as donné et qui utilisait meshgrid. Si on ne sait pas à quoi ressemble tes données, on ne pourra pas t'en dire plus.

    Analyse l'exemple de surfature :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [X,Y,Z] = peaks; 
    [K,H,P1,P2] = surfature(X,Y,Z); 
    surf(X,Y,Z,H,'facecolor','interp'); 
    set(gca,'clim',[-1,1])
    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.

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Je suis désolée je n'ai pas donné plus de détails,
    mes points correspondent à des voxels (points en 3D) qui représentent une courbe ayant comme polynôme
    42.5376 - 2.9056*x + 3.7073*y + 0.044912*x^2 - 0.038811*y^2 - 0.047189*x*y
    et j'ai besoin d'un indice de courbure moyenne de la courbe représentative du polynôme
    Merci

  14. #14
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    l'auteur de cette fonction dit que "X,Y,Z ARE 2D ARRAYS OF POINTS ON THE SURFACE", ce que je n'ai pas compris.
    Effectivement, c'est incompréhensible.

    Comme ton problème n'est pas spécifiquement lié à Matlab, je transfère cette discussion dans le forum algo/maths.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Excusez moi, mais je pense que c'est plus un problème de matlab que problème algorithmique
    moi aussi je n'ai pas compris comment transformer mes données pour les adapter aux données d'entrée étant donné qu'il utilise mean curvature pour calculer l'indice de courbure

  16. #16
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Je regarderais du côté des courbure de Gauss
    Peut-être consulter le lien:

    http://fr.wikipedia.org/wiki/Courbure_de_Gauss

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