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 :

definition d'un nouveau repere à partir de 4 points


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut definition d'un nouveau repere à partir de 4 points
    Bonjour,
    J'ai un repère orthonormé avec dedans 4 points : pts1 pts2 pts3 ptsh
    Ces 4 points vont me permettre de définir un autre repérè centré en J'ai utilisé en partie les geom3d
    https://fr.mathworks.com/matlabcentr...4&tab=function


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    u=pts1-pts2
    v=pts1-pts3
     
    per123=cross(u,v);
    p123=createPlane(Obis, per123);
    drawPlane3d_ml(p123,'c');
     
    ptshproj=projPointOnPlane(ptsh, p123)
     
    w=ptsh-ptshproj
    perH=cross(w,u);
    pH=createPlane(Obis, perH);
    drawPlane3d_ml(pH,'y');

    Je pensais que pH et p123 étaient perpendiculaire, mais aprés vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          pT=pH;
                            pointT=pT(1:3);
                            vect1T=pT(4:6);
                            vect2T=pT(7:9);
                            theta = acos(dot(vect1T,vect2T))*180/pi;
                                pS=p123;
                            pointS=pS(1:3);
                            vect1S=pS(4:6);
                            vect2S=pS(7:9);
                            theta = acos(dot(vect1S,vect2S))*180/pi;
                            theta_pHp123 = acos(dot(vect1S,vect1T))*180/pi
    j'ai un angle de 89.3233

    je ne comprends pas pourquoi. Sauriez vous m'aiguiller ?
    Merci

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Salut,

    effectivement, vu la manière dont tu crées tes plans, on devrait tomber sur un angle de 90 degres...

    Pourrais-tu donner un jeu de données de test minimal afin de reproduire le problème ?

    Tu dois aussi avoir une fonction "dihedralAngle", qui calcule l'angle entre deux plans, et qui peut permettre d'identifier les problemes.

    PS : je suis l'auteur du paquetage en question...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Bonjour,
    Merci pour le package :-)
    Voici mon code
    En effet avec la fonction dihedralAngle, on a bien 90. :-)

    Pourquoi pas avec mon code ? a priori un probleme d'approximation...

    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
    pts1=[ 106.2345  149.5022  485.0000]
    pts2=[ 135.4314  142.8186  485.0000]
    pts3=[ 116.0841  130.5066  489.0000]
    ptsh=[ 154.1145  201.6369  191.0000]
    Obis=[117 134 548];
     
    u=pts1-pts2;
    v=pts1-pts3;
     
    per123=cross(u,v);
    p123=createPlane(Obis, per123);
     
    ptshproj=projPointOnPlane(ptsh, p123);
     
    w=ptsh-ptshproj;
    perH=cross(w,u);
    pH=createPlane(Obis, perH);
     
     %  pHp123
        pT=pH;
        pointT=pT(1:3);
        vect1T=pT(4:6);
        vect2T=pT(7:9);
        theta = acos(dot(vect1T,vect2T))*180/pi;
     
        pS=p123;
        pointS=pS(1:3);
        vect1S=pS(4:6);
        vect2S=pS(7:9);
        theta = acos(dot(vect1S,vect2S))*180/pi;
        disp('verif manuel')
        theta_pHp123 = acos(dot(vect1S,vect1T))*180/pi
     
     
        % fin verif
    disp('verif pakage')
    dihedralAngle(pH,p123)*180/pi
     
    plot3(1376,1376,1376,'r.'); hold on; grid on;
    plot3(1376,-1376,-1376,'r.'); hold on; grid on;
    plot3(-1376,1376,-1376,'r.'); hold on; grid on;
    plot3(Obis(1),Obis(2),Obis(3),'k.'); hold on; grid on;
     
    drawPlane3d_ml(pH,'y');
    drawPlane3d_ml(p123,'c');
    Pour faire le 3eme axe, ca ne roule pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    line1=intersectPlanes(p123,pH)
    pts1_2=projPointOnLine3d(pts1,line1)
    z=ptsh-pts1_2
     
    perZ=cross(w,z);
    pZ=createPlane(Obis, perZ);
    drawPlane3d_ml(pZ,'b');
     
    dihedralAngle(pZ,p123)*180/pi
    dihedralAngle(pZ,pH)*180/pi

    Ensuite, il me reste a changer de repère tous mes points d’intérêt. Une idée de comment ?
    merci merci merci :-)

  4. #4
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Peut être une piste, en regardant vite fait : le plan pH est créé de manière à être normal au vecteur perH. Par contre, rien n'est spécifié pour les vecteurs directeurs du plan. Donc quand on teste les couples de vecteurs directeurs, on n'a aucune raison d'avoir l'orthogonalité. Par contre l'orthogonalité des plans est imposée.

    Est-ce que ça aide ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Bonjour,
    Merci pour la réponse, en effet
    Pourquoi pas avec mon code ? a priori un probleme d'approximation..
    -> non
    Avec les vecteurs :
    on n'a aucune raison d'avoir l'orthogonalité.
    -> oui

    Pour créer le 3eme axe passant par Obis et par le point ptsh perpendiculaire aux deux autres plans, je n'arrive pas à m'en sortir avec mon code. Une idée ?
    Merci

  6. #6
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    je crois que je ne comprends pas très bien ce qui est recherché en fait...

    Si je reprends :
    * on a 3 points, qui définissent un plan P123
    * on a un point ptsh, que l'on projette sur p123. On en déduit le vecteur normal w entre ptsh et sa projection.
    * je ne comprends pas ce que l'on attend du plan pH. Il est perpendiculaire au plan P123, et le vecteur w est inclus dedans (vu que w est une normale de P123, c'est logique). Mais il peut avoir plein d'orientation différentes...
    * le point Obis doit etre inclus dans le nouveau plan pH. Mais il reste plein de possibilités pour l'orientation.

    Sinon la fonction intersectPlanes renvoie une droite 3D. Son vecteur directeur (obtenu avec les 3 derniers paramètres de la représentation) peut être utilisé pour créer un plan, qui sera perpendiculaire aux deux autres. A voir si ca aide ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Merci,
    A force de chercher, je me suis emmêlés les pinceaux.
    Merci pour votre aide.

    A partir de 4 points et d'une origine Obis, on créer un nouveau repere ortho.

    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
    pts1=[ 106.2345  149.5022  485.0000]
    pts2=[ 135.4314  142.8186  485.0000]
    pts3=[ 116.0841  130.5066  489.0000]
    ptsh=[ 154.1145  201.6369  191.0000]
     
    Obis=[117 134 548];
     
    u=pts1-pts2;
    v=pts1-pts3;
     
    per=cross(u,v);
    p1=createPlane(Obis, per);   % plan1 p123
     
    ptshproj=projPointOnPlane(ptsh, p1);
     
    w=ptsh-ptshproj;
    perH=cross(w,u);
    p2=createPlane(Obis, perH); % plan2 pH
     
    line1=intersectPlanes(p1,p2)
    p3=createPlane(Obis, line1(4:6));   % plan3
     
    dihedralAngle(p1,p3)*180/pi
    dihedralAngle(p1,p2)*180/pi
    dihedralAngle(p2,p3)*180/pi
    Pour avoir les points dans ce nouveau repère. Je pense faire pour chacun des points 3 projections
    projPointOnPlane(point, p1)
    projPointOnPlane(point, p2)
    projPointOnPlane(point, p3)

    :-)

  8. #8
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    oui, les trois plans sont bien orthogonaux, et les trois projections vont définir un nouveau repère.

    Du coup c'est bon ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    Non ...
    je projette sur les 3 plans de mon repere pS pT et pC mes 3 points par exemple point1 point2 point3

    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
     
    point1 =[   147.0400  212.8000  233.0000];
    point2 =[170.4300  210.1200  232.0000];
    point3 =[   146.6600  204.9400  239.0000];
     
    pS =[ 120.3934  140.9860  495.6667         0    0.1516    0.9884   -0.3200   -0.9365    0.1436];
    pT=[  120.3934  140.9860  495.6667         0   -0.9809   -0.1943   -0.9934    0.0222   -0.1122];
    pC =[  126.4478  137.5539  496.0000         0   -0.2296    0.9733   -0.9543    0.2909    0.0686];
     
    pointPjt1S=projPointOnPlane(point1, pS);
    pointPjt2S=projPointOnPlane(point2, pS);
    pointPjt3S=projPointOnPlane(point3, pS);
     
    pointPjt1T=projPointOnPlane(point1, pT);
    pointPjt2T=projPointOnPlane(point2, pT);
    pointPjt3T=projPointOnPlane(point3, pT);
     
    pointPjt1C=projPointOnPlane(point1, pC);
    pointPjt2C=projPointOnPlane(point2, pC);
    pointPjt3C=projPointOnPlane(point3, pC);
     
    tt1=[pointPjt1S(1),pointPjt1T(2),pointPjt1C(3)];
    tt2=[pointPjt2S(1),pointPjt2T(2),pointPjt2C(3)];
    tt3=[pointPjt3S(1),pointPjt3T(2),pointPjt3C(3)];
     
    tt1-Obis % OM-OObis
     
    pointPjt1S-Obis
    Je pensais que les tt seraient identiques pour l'une des coordonnées.

    une idée de ce qu'il cloche ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 99
    Points
    99
    Par défaut
    une idée de ce qu'il cloche ?
    J'ai essayé d'une autre maniere avec transformPoint3d et createBasisTransform3d et testé avec des points. Je ne suis pas sur des coordonnées de Aprojeté dans mon repère pS pT pC
    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
    pS=p1;pC=p2;pT=p3
     
    A= Plane(1:3)
    % l=intersectPlanes(pS, pC) ; A=l(1:3)
    % l=intersectPlanes(pT, pC) ; A=l(1:3)
     
    l=intersectPlanes(pT, pS) ; A=l(1:3)
    Plane=pS;
    Tform = createBasisTransform3d('global', Plane); 
    PT_WRT_PLANES = transformPoint3d(A, Tform)
    Plane=pT;
    Tform = createBasisTransform3d('global', Plane); 
    PT_WRT_PLANET = transformPoint3d(A, Tform)
    Plane=pC;
    Tform = createBasisTransform3d('global', Plane); 
    PT_WRT_PLANEC = transformPoint3d(A, Tform)
    Apjt= ...
    Une idée ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2010, 08h50
  2. creation d'un nouveau repere dans un repere parent
    Par tonyblinson dans le forum MATLAB
    Réponses: 0
    Dernier message: 02/05/2008, 02h09
  3. Ouvrir nouveau document à partir d'un modèle
    Par Ofsco dans le forum Word
    Réponses: 13
    Dernier message: 28/12/2007, 10h26
  4. [FEDORA] Ajouter un nouveau logiciel à partir du cd
    Par sorari dans le forum RedHat / CentOS / Fedora
    Réponses: 8
    Dernier message: 10/04/2007, 10h42
  5. Réponses: 8
    Dernier message: 10/10/2006, 10h58

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