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 :

Modélisation d'un cercle (non centré) en coordonnées polaires


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieur automaticien
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur automaticien

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Modélisation d'un cercle (non centré) en coordonnées polaires
    je souhaite déterminé la position d'un (arc) de cercle (son rayon serra supposé connu).
    Voici un exemple de simulation :

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a=4; % abssice du centre du cercle
    b=4; % ordonnée du centre du cercle
    r=1.5; % rayon du cercle
     
    teta=pi/6:0.01:pi/3; % defini en fonction de a, b, r
     
    delta=4*(a.*cos(teta)+b.*sin(teta)).^2-4*(a^2+b^2-r^2); %discriminant 
    d = (2.*a.*cos(teta)+2.*b.*sin(teta)-sqrt(delta))./2; 
     
    polar(teta,d)

    j'obtiens donc d=f(teta)
    Les vecteurs "d" et "teta" et le paramètre "r" sont donc connue.
    A présent, je souhaite retrouver, par modélisation, les valeurs de "a" et "b".

    Merci de votre attention!!!

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Ton problème est plus d'ordre mathématiques.

    Si j'ai bien compris ton problème : soit un arc de cercle dont du connais le rayon. A partir de là tu veux déterminer les coordonnées du centre de cet arc de cercle.

    Dans ce cas la solution est simple. Tu traces une segment borné par les extrémités de l'arc. Par définition le rayon de l'arc est perpendiculaire et passe par le milieu du segment. comme tu connais le rayon, tu détermines aisément les coordonnées du centre.

    Voilà comment je ferai

    1) A et B sont les extrémités de l'arc. Tu connais leur coordonnées. Donc avec le théorème de Pythagore tu calculs la longueur de [AB].

    2) tu récupère les coordonnées du milieu

    3) Tu veux obtenir l'équation qui correspond à ton rayon. La solution la plus simple, et probablement pas la plus pertinente, se base sur la définition du produit scalaire. En effet AB perpendiculaire à R signifie que AB.R=0. Donc pour chaque points de ton arc, tu calcules un vecteur R allant de X à mil(A,B) avec A<X<B.

    4) Tu récupères le X correspondant au produit scalaire le plus proche de 0. Cela va te permettre de créer un segment qui commence à X passant par mil(A,B) et de longueur le rayon. Comme tu connais l'équation du segment, tu obtiens facilement les coordonnées du centre.

    Avec ça, tu devrais pouvoir implémenter un petit programme.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieur automaticien
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur automaticien

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci de votre attention,
    Effectivement, connaissant les coordonnées des extrémités de l'arc le problème est simple mais comment les obtenir?
    j'explicite mon problème, j'ai a ma disposition un capteur de distance pouvant tourner autour d'un axe dont je connais la position angulaire. Je souhaiterai a partir de la trouver les coordonnées du centre d'un cercle de rayon R quelque soit l'environnement autour de ce dernier.
    n'existe t'il pas un outils de modélisation en coordonné polaire sous matlab? (je suis parvenue, par un procédé itératif a l'aide de boucle, a résoudre mon problème,mais sont exécution prend au moins 30min et sont optimisation est extrêmement délicate... bref je ne suis pas satisfait :/

  4. #4
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 700
    Points
    8 700
    Billets dans le blog
    43
    Par défaut
    Sauf erreur de ma part, il te manque une information d'une façon ou d'une autre.
    Le rayon et la position en coordonnée polaire n'est pas suffisante. Il te faudrait également la position en coordonnées cartésiennes pour pouvoir déduire les coordonnées du centre du cercle.

    Tout ce que tu peux en déduire pour le moment est ta position en coordonnée cartésienne dans un repère d'origine le centre du cercle de rayon r.
    Tutoriels et FAQ TypeScript

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    En relisant ton message initial, je crois que j'ai une solution qui devrait réduire ton temps de calcul. Je te propose de te servir de la fonction solve en écrivant une sytème d'équation.

    En fait le modèle tu l'as partiellement écris dans ces quelques lignes de code

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    a=4; % abssice du centre du cercle
    b=4; % ordonnée du centre du cercle
    r=1.5; % rayon du cercle
     
    teta=pi/6:0.01:pi/3; % defini en fonction de a, b, r
     
    delta=4*(a.*cos(teta)+b.*sin(teta)).^2-4*(a^2+b^2-r^2); %discriminant 
    d = (2.*a.*cos(teta)+2.*b.*sin(teta)-sqrt(delta))./2;

    En effet tu dis que tu connais teta, d et r. Avec cela, tu cherches a et b qui sont les coordonnées du centre du cercle.

    Tu as donc une première équation qui est la suivante :

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    d = (2.*a.*cos(teta)+2.*b.*sin(teta)-sqrt(delta))./2;

    La deuxième équation tu l'obtiens avec la norme du vecteur correspondant au rayon donnée par :

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    r=sqrt((r.*cos(teta)-a).^2+(r.*sin(teta)-b).^2)

    C'est là que la fonction solve intervient :

    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    [a,b]=solve('(2.*a.*cos(teta)+2.*b.*sin(teta)-sqrt(delta))./2=d','sqrt((r.*cos(teta)-a).^2+(r.*sin(teta)-b).^2)');

    A priori avec ça tu devrais obtenir rapidement les coordonnées du centre.


    PS : j'étais en train de rédiger ma réponse quand yahiko à poster la sienne ^^. Cependant il a raison. La solution que je te propose est en coordonnées cartésiennes. Tu ne peux pas directement faire le calcul en polaire avec les données que tu as. Mais cela n'est pas vraiment un problème vu que le résultat ne dépend pas du système de coordonnées considéré.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Évidemment tu dois remplacer delta par son expression en fonction de a et b. Sinon tu vas avoir un problème

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieur automaticien
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur automaticien

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Encore merci pour votre implication.
    Beltharion, Ta réponse me semble absurde. je m'explique, d’après ton raisonnement il me suffirait de connaitre un unique couple (d,theta) pour connaitre la position du centre, tu comprendra que ce n'est pas possible...
    En faite la deuxième équation que tu me propose (qui présente des erreurs, mais j'ai compris où tu voulait en venir) est strictement la même que la première ^^. En effet elle peut se ramener sous la forme ax²+bx+c=0. en résolvant cette équation tu tombe sur la premiers
    Dommage.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieur automaticien
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur automaticien

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Non excuse moi, ta deuxième équation présente simplement une inversion de syntaxe entre d et r. Dans mon problème x=d.cos(teta) y=d.sin(teta) [bref "d" c'est le module et "r" c'est le rayon du cercle]

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Oui effecitvement, je n'avais pas fait attention... Désolé. Je vais réfléchir un peu plus. A priori, on doit pouvoir trouver une deuxième équation pour trouver les coordonnées du centre.

    Autrement, tes mesures te donnent-elles un fichier résultats ? Si oui est-ce que tu peux en donner un exemple? C'est souvent plus simple de partir de données expérimentales pour trouver un modèle.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieur automaticien
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur automaticien

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Résolu!! Du moins, pour la théorie, je n'est toujours pas pu faire de relevés expérimentaux mais ça ne serai tardé ^^
    La solution est donné par la fonction lsqcurvefit :

    Code MATLAB : 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
    clc
    close all
    clear all
    a=4; % abssice du centre du cercle
    b=4; % ordonnée du centre du cercle
    r=1.5; % rayon du cercle
     
    teta=linspace(pi/3,pi/6,10); % defini en fonction de a, b, r
     
    delta=4*(a.*cos(teta)+b.*sin(teta)).^2-4*(a^2+b^2-r^2) %discriminant 
    d = (2.*a.*cos(teta)+2.*b.*sin(teta)-sqrt(delta))./2
     
    polar(teta,d,'r*')
     
    F = @(x,tdata)(2.*x(1).*cos(tdata)+2.*x(2).*sin(tdata)-sqrt(4*(x(1).*cos(tdata)+x(2).*sin(tdata)).^2-4*(x(1)^2+x(2)^2-r^2)))./2;
    x0=[1 1]
    [x,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,teta,d)
     
    hold on
    polar(teta,F(x,teta))
    hold off
     
    A=real(x(1))
    B=real(x(2))

Discussions similaires

  1. [Débutant] Histogramme non centré
    Par IFREMER dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/05/2009, 21h01
  2. tableau non centré
    Par kev484 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 04/01/2008, 13h19
  3. Tableau non centré
    Par fred1599 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 05/11/2007, 18h52
  4. Image non centrée dans un tableau
    Par Kaneda Shotaro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/11/2007, 11h21
  5. tableau non centré quand je modifie mes pages en XHTML
    Par Linoa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/09/2005, 10h26

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