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 :

Intersection cylindre / droite


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 32
    Points : 33
    Points
    33
    Par défaut Intersection cylindre / droite
    Bonjour ,

    Ici mon code pour ayant pour objectif de gérer l'intersection d'une droite qui se propage à l'intérieur d'un cylindre dont l'axe est z . Je vous laisse le soin de le lire avec les commentaires. Puis , trouver ma question par la suite.

    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
     
    %%la  fonction qui gère les reflexions 
    function [toucher,t0]= verif_ray_cylindre_intersection(ydep,rayon,longueur)
    %% Ray position and orientation (Space xyz)
    x0 = ydep(1); y0 = ydep(2); z0 = ydep(3); % coordonnées  position de départ 
    kx = ydep(4); ky = ydep(5); kz = ydep(6);  %  composantes de mon vecteur directeur 
     
    toucher =false; t0 = -1; % initialisation du toucher à faux et t0 à -1
    % Ma droite a comme équation y= ydep(1:3) + ydep(4:6) * t valable pour x , y et z et mon cylindre a comme équation x^2+y^2=r^2 ; 0=< z =< longueur. trouver l'intersection revient à résoudre une équation de second degré , donc discriminant et deux solutions si le  discriminant est positif  ... 
     
    deltap= (kx*x0+ky*y0)^2-(kx^2+ky^2)*(x0^2+y0^2-rayon^2);   %discriminant-prime
    if deltap >= 0
        deltap = sqrt(deltap);               %racine carrée du discriminant-prime
        t0partiel = -(kx*x0+ky*y0);
        t1 = (t0partiel-deltap) / (kx^2+ky^2); % premier t 
        t2 = (t0partiel+deltap) / (kx^2+ky^2); % deuxième t 
     
            if kz*t1 > 0 % pour se propager dans le sens  z positif 
            t0=t1;
        elseif kz*t2 > 0 % sinon t2 
            t0=t2;
        end
    end
    if ( t0 >= 0 && longueur >= kz*t0+z0 && kz*t0+z0 >= 0), toucher=true; end% il faut pas que ma droite ( rayon ) déborde des deux limites inf et sup de mon cylindre

    Problème : mon code me donne des valeurs de t de l'ordre de 1e-17 , ce qui empêche mon rayon de se propager correctement . Comment faire pour y remédier dans le code de facon mathématique sans magouiller ?


    Je vous remercie d'avance.

  2. #2
    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!
    des valeurs bizarres de t de l'ordre de 1e-17
    Voir la norme IEEE 754.
    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)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 32
    Points : 33
    Points
    33
    Par défaut
    Merci pour ta réponse . Pourriez vous me proposer des améliorations

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour,

    est-ce que tu pourrais nous donner les valeurs que tu utilises pour arriver à ce résultat ?
    ydep,rayon,longueur ?

  5. #5
    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!
    Pourriez vous me proposer des améliorations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si Abs(x)<1e-15 Alors x=0
    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)

Discussions similaires

  1. Intersection entre droite et polygone dans un plan
    Par MottetCCSF dans le forum Mathématiques
    Réponses: 1
    Dernier message: 02/04/2012, 16h41
  2. Réponses: 5
    Dernier message: 22/03/2012, 19h06
  3. Intersection entre droite et un plan
    Par Dark-Water dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 24/03/2009, 17h47
  4. Intersection courbe droites
    Par Medde dans le forum Mathématiques
    Réponses: 8
    Dernier message: 26/02/2009, 20h44
  5. [Débutant] Intersection de droites et variables symboliques
    Par Fredovsky dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/02/2009, 14h19

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