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 :

Generer un plan de dimension finie


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Generer un plan de dimension finie
    Bonjour,

    Je dois représenter sur MATLAB une plaque de dimensions et d'orientation fixées.
    Je modélise cette plaque par un plan dont je connais la normale et les coordonnées d'un point a l'aide de l’équation du plan : ax + by + cz + d = 0. J'utilise la fonction SURF de MATLAB pour représenter le plan :
    SURF(X,Y,Z) o˘ Z = -1/c*(ax + by +d).
    Pour l'instant, je définis X,Y comme une grille a l'aide de la fonction meshgrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [X,Y]=meshgrid(-10:1:10,-10:1:10)
    Mais cette définition de X,Y n'est pas du tout ce que je recherche car mon plan a des dimensions fixées (largeur W et longueur L)et doit se trouver a un endroit précis dans l'espace.

    Il faut donc que je définisse X et Y de telle sorte que mon plan final ait une largeur W, une longueur L et que les valeurs de Z soient toutes inférieures ou égales a 0.

    Quelqu'un aurait-il une astuce ?

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Pour les notions de "largeur" et de "longueur", la normale au plan ne suffit pas puisqu'il te faudra définir un référentiel. Imagine une feuille de papier sur une table, tu peux l'orienter comme tu veux, la normale restera la même. Tu peux par exemple définir que la "largeur" est en X et la "longueur" en Y supposant qu'il n'y a pas de rotation autour de l'axe normal pour simplifier le problème au niveau de l'orientation.

    Voici un exemple :

    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
    % Réinitialisation
    close all;
    clear all;
    clc;
     
    % Données
    n = [1;1;1];
    largeur = 30;
    longueur = 50;
    position = [10;-20;30];
     
    % Plan de base
    [x,y] = meshgrid(linspace(-largeur/2,largeur/2,10),linspace(-longueur/2,longueur/2,10));
    z = zeros(size(x));
     
    % Définition du référentiel
    axez = n/norm(n); % Axe z est donc la normale
    if all(cross(axez,[1;0;0]) == 0) % Gestion des cas problématiques
        axex = [0;0;1];
        axey = [0;1;0];
    elseif all(cross(axez,[0;1;0]) == 0) % Gestion des cas problématiques
        axex = [1;0;0];
        axey = [0;0;1];
    else
        % Cas standard : X pointe vers l'axe X positif, Y pointe vers l'axe Y positif
        axey = cross(axez,[1;0;0])/norm(cross(axez,[1;0;0]));
        axex = cross(axey,axez)/norm(cross(axey,axez));
    end
     
    % Matrice de rotation générée appliquée aux données
    tmp = [axex,axey,axez]*[x(:)';y(:)';z(:)'];
     
    % Translation
    x = reshape(tmp(1,:),size(x)) + position(1);
    y = reshape(tmp(2,:),size(y)) + position(2);
    z = reshape(tmp(3,:),size(y)) + position(3);
     
    % Affichage
    surf(x,y,z);
    alpha(0.5);
    hold all;
    % RGB = XYZ du référentiel
    quiver3(position(1),position(2),position(3),axex(1)*max(longueur,largeur)/10,axex(2)*max(longueur,largeur)/10,axex(3)*max(longueur,largeur)/10,0,'r');
    quiver3(position(1),position(2),position(3),axey(1)*max(longueur,largeur)/10,axey(2)*max(longueur,largeur)/10,axey(3)*max(longueur,largeur)/10,0,'g');
    quiver3(position(1),position(2),position(3),axez(1)*max(longueur,largeur)/10,axez(2)*max(longueur,largeur)/10,axez(3)*max(longueur,largeur)/10,0,'b');
    hold off;
    xlabel('x');
    ylabel('y');
    zlabel('z');
    axis equal;

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Super votre solution. J'obtiens exactement ce que je cherchais en appliquant les parametres qui m'interessent.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Plans de coupe à plus de 3 dimensions
    Par lileric13 dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/12/2012, 12h14
  2. Calcul des coordonnées d'un point dans un plan à 2 dimensions
    Par Séléné dans le forum Mathématiques
    Réponses: 4
    Dernier message: 16/02/2010, 10h15
  3. [XL-2003] Macro pour generer un planning
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2009, 20h38
  4. changer l'image d'arrière plan du bureau
    Par etenclin dans le forum MFC
    Réponses: 7
    Dernier message: 22/08/2002, 15h54
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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