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 :

Géométrie - inclinaison d'une droite


Sujet :

MATLAB

  1. #1
    Invité
    Invité(e)
    Par défaut Géométrie - inclinaison d'une droite
    Bonjour à tous!
    Je suis actuellement sur un projet et j'aimerais faire visualiser à l'utilisateur certaines choses.
    Pour faire très simple, l'utilisateur est amené à choisir un angle alpha (en degré) et j'aimerai ploter une droite de longueur finie inclinée selon le choix de l'utilisateur et pouvoir repérer le début et la fin de la droite pour y mettre des annotations. L'entrée est seulement l'angle alpha, l'utilisateur ne doit pas interagir davantage.

    Avez vous une idée? J'avais pensé aux coordonnées polaires mais ça me donne vite des figures courbées... Et si non une droite je sais faire mais l'incliner déjà c'est quelque chose, et faire matcher les degrés aux pixels c'est autre chose et là je sèche...

    Merci d'avance pour votre aide!
    Dernière modification par Invité ; 11/12/2016 à 12h16.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par titi119 Voir le message
    une droite de longueur finie
    Dans ce cas, cela s'appelle un segment, pas une droite.

    Citation Envoyé par titi119 Voir le message
    L'entrée est seulement l'angle alpha, l'utilisateur ne doit pas interagir davantage.
    C'est impossible, avec l'angle seul, il y a une infinité de droites parallèles…
    Il faut un point par lequel passe la droite (même choisi arbitrairement)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Exacte! Un segment!

    Disons que je peux choisir arbitrairement la position horizontale de mon segment. La chose que je souhaiterais faire, c'est à une position fixée, faire tourner ce segment d'un angle alpha autour de son milieu. C'est uniquement pour faire visualiser la "chose" à l'utilisateur. Rien de bien scientifique sur ce coup là.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Montre nous ce que tu as essayé de faire (même si c'est faux)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas vraiment de piste justement...
    J'ai déjà essayé de comprendre comment je pouvais générer une rotation mais de là à inclure une entrée en degré...

    Tout simplement dans un premier temps, générer un segment horizontal
    Bon, voyant que de là je ne pouvais pas aller bien loin je me suis dis qu'en coordonnées polaires ça pourrait être plus parlant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    theta = linspace(0,2*pi,1000);
    r = 5;
    x = r*cos(theta);
    y = r*sin(theta);
     
    x = x+10;
    a = x.^2+y.^2;
     
    plot(a)
    Avec ceci j'ai un segment, et si j'incrémente theta sur x ou y seulement, j'ai une rotation, mais je n'arrive pas dutout à relier rotation et angle et certaine fois, j'obtient une courbe

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par titi119 Voir le message
    Avec ceci j'ai un segment
    Euh… tu es sûr ?

    Bref, prend une feuille de papier et un crayon :
    1. trace un repère cartésien
    2. trace un point en (x,y)
    3. trace son symétrique par rapport au centre du repère (-x,-y)

    Tu obtiens un segment d'angle theta par rapport à l'horizontale (axe des abscisses)

    Un peu de trigonométrie te donne la relation entre theta et (x,y).
    C'est écrit dans le code que tu as posté précédemment.

    Il faut ensuite effectuer une translation du centre du segment (0,0) vers le centre réelle du segment

    Il ne te reste donc plus qu'à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    theta = ...
     
    x = ...
    y = ...
     
    figure
    plot([-x x]+..., [-y y]+..., 'b-');
    Et tu ajoutes les lignes suivante pour la mise en forme du graphique :
    Tu peux aussi ajouter l'horizontale directement avec le tracé du segment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot([-1 1]+..., [0 0]+..., 'r:', [-x x]+..., [-y y]+..., 'b-');
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Super!! J'ai réussi! Merci beaucoup! (effectivement, dans mon code d'avant il fallait enlever le "+10" pour obtenir une droite (ou un segment je ne sais plus)

    Voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    close all
    theta = 10;
    theta = deg2rad(theta);
    r = 0.50;
    x = r*cos(theta);
    y = r*sin(theta);
     
    figure
    plot([-1 1]+theta, [0 0]+theta, 'r:', [-x x]+theta, [-y y]+theta, 'b-');
    axis equal

    J'aimerai maintenant mettre des annotations sur cette figure (du texte) qui sera aux extrémités gauche et droite du segment. Qu'est-ce que vous me conseillez?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par titi119 Voir le message
    J'aimerai maintenant mettre des annotations sur cette figure (du texte) qui sera aux extrémités gauche et droite du segment.
    Utilise la fonction text
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Super merci, effectivement, ça fonctionne!

    Mon souci maintenant c'est que le segment ne tourne pas autour d'un axe. Du coup les x et les y changent tout le temps, je ne peux donc pas écrire un texte en fonction de x,y qui va "suivre" le segment et je ne vois pas du tout comment je pourrais faire :/


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        alpha_rad = -alpha_rad;
        r = 0.60;
        x = r*cos(alpha_rad);
        y = r*sin(alpha_rad);
     
        figure(1)
        plot([-1 1]+alpha_rad, [0 0]+alpha_rad, 'r:'); hold on
        plot([-x x]+alpha_rad, [-y y]+alpha_rad, 'k-', 'LineWidth', 2)
        axis equal
        title([('droite inclinée d un angle alpha = ') sprintf('%d',alpha) ('degrés')], 'interpreter', 'latex', 'fontsize',20)
        set(gca,'xtick',[],'ytick',[])
        text(-x-0.20+alpha_rad,-y+alpha_rad,'toto')

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Depuis le début, tes explications manquent cruellement de clarté…

    Prends le temps de bien poser ta question avec les bons termes.

    Et si possible, montre nous un aperçu de ce que tu cherches à obtenir.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Très bien, je vais tacher d'être plus précis.

    J'étudie un écoulement d'air très simplifié autour d'une plaque 2D (mon segment). Je passe les détails mais en gros avec quelques calculs on a différents comportements qui se produisent en 4 zones: en amont (point de gauche du segment), au dessus, en dessous et en aval (point de droite) de la plaque/du segment.
    J'ai donc 4 zones que je veux montrer à l'utilisateur (zone 1, 2, 3, 4). Ma "plaque" sera inclinée d'un angle alpha que l'utilisateur doit choisir (cet angle va faire varier le comportement de l'écoulement d'air que j'essaye de modélisé etc...).

    Mon programme propose à l'utilisateur d'analyser une des 4 zones (Choisir une zone pour laquelle vous voulez avoir des informations etc..).
    Vu que l'utilisateur doit éventuellement choisir une zone afin que mon programme lui renvoi le comportement de l'écoulement en cette zone, j'aimerais pouvoir faire apparaitre une figure très simplifiée montrant:
    - la plaque inclinée de "alpha degrés"
    - le nom des zones sur la figure (afin de bien parler des mêmes zones, qu'il n'y est pas de litiges etc...)


    Jusque là tu m'as vraiment beaucoup aidé. Le seul souci c'est qu'en faisant varier alpha, ma plaque tourne bien avec le bon angle c'est génial MAIS elle change d'axe si je puis dire.

    Ce que j'aimerais faire:
    Admettons que j'ai un segment ayant pour milieu (x,y) = (0,0), j'aimerais juste que ce segment tourne autour de ce point fixe. Ceci me permettra d'apposer du texte (mes zones) bien plus facilement: si par exemple "zone 3" signifie le bout du segment (= de la plaque), tu comprendra bien que "zone 3" ne sera pas écrit au même endroit si je suis à 10° ou si je suis à 60° vois-tu?


    J'ai essayé d'être le plus clair possible, n'hésite pas à me relancer si ça te semble encore flou. En tout cas, merci pour ton aide!

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Si je comprends bien, il n'y a donc pas de translation du segment ?

    Dans ce cas, ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plot([-1 1]+alpha_rad, [0 0]+alpha_rad, 'r:'); hold on
    plot([-x x]+alpha_rad, [-y y]+alpha_rad, 'k-', 'LineWidth', 2)
    devient simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plot([-1 1], [0 0], 'r:'); hold on
    plot([-x x], [-y y], 'k-', 'LineWidth', 2)
    Non ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    le plus simple quand on fait une rotation autour d'un point autre que l'origine du repère c'est justement de changé l'origine du repère en ce point.

    si tu veux faire une rotation autour de O' (1,1).

    tu exprimes tous les point a faire tournés dans le repère d'origine O' (donc le point (2,2) devient (1,1) et le (0,0) devient (-1,-1))
    ensuite tu applique la rotation comme précédemment.
    et pour finir tu repasse dans le repère d'origine.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bah écoute ça fonctionne .
    Je n'avais bien compris ta méthode je pense! Mais maintenant je pense que c'est bon!


    Merci beaucoup! Je vais pouvoir avancer sur la suite!

  15. #15
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Géométrie - inclinaison d'une droite
    Bonjour,

    Autre solution ;

    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
    clear
    L=10;% Longueur du segment
    x0=10;y0=10;% Coordonnées initiales du milieu
    alpha0=30;% Angle initial
    V=L*[cosd(alpha0) sind(alpha0)];
    h1=line([x0-V(1)/2 x0+V(1)/2],[y0-V(2)/2 y0+V(2)/2]);% Rotation autour du centre
    text(x0-V(1)/2,y0-V(2)/2,'zone 1')
    %h1=line([x0 x0+V(1)],[y0 y0+V(2)]);text(x0,y0,'zone 1');% Rotation autour de l'origine du segment
    set(h1,'Color','r','LineStyle','--')
    grid
    axis square
    axis([0 20 0 20])
    alpha = 60;% Choix de l'angle
    alpha=alpha0-alpha;% Calcul de la rotation
    VR=V*[cosd(alpha) -sind(alpha); sind(alpha) cosd(alpha)];%Rotation du segment
    hold on
    h2=line([x0-VR(1)/2 x0+VR(1)/2],[y0-VR(2)/2 y0+VR(2)/2]);% Rotation autour du centre
    text(x0-VR(1)/2,y0-VR(2)/2,'zone 1')
    %h2=line([x0 x0+VR(1)],[y0 y0+VR(2)]);text(x0,y0,'zone 1');% Rotation autour de l'origine du segment
    set(h2,'Color','b')

Discussions similaires

  1. Récupérer l'ensemble des points d'une droite
    Par Psycho_Kwak dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/01/2006, 11h42
  2. Intersection d'une droite et d'un plan
    Par Snark dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/12/2005, 19h24
  3. Déplacement d'une Cible sur une droite
    Par kurul1 dans le forum C++Builder
    Réponses: 10
    Dernier message: 11/07/2005, 16h44
  4. Comptage de voxels traversés par une droite 3D
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/04/2005, 16h33
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11

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