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

Python Discussion :

Librairie pour trouver l'equation d'une droite


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut Librairie pour trouver l'equation d'une droite
    Bonjour, je cherche à effectuer des calculs en rapport avec un robot de tonte (calcul des perimetres de tontes...), je cherche à faire differentes operations mathematiques.

    Notament savoir si un point (position gps) appartient a une droite. Je me demande donc s'il existe une librairie qui pourrait me faciliter le travail.

    Par exemple avec cette equation : y=−0.7053x+47.4538

    qui correspond a la droite avec ces coordonées gps:

    x1:5.084677441666667 y1:43.868069425
    x2:5.084690403333333 y2:43.868060281666665

    Existe t'il une librairie qui pourrais effectuer ce genre de calcul, comme trouver l'equation et savoir si un point gps appartient à une droite.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Citation Envoyé par carlita_84
    Existe t'il une librairie qui pourrais effectuer ce genre de calcul
    Pas besoin de librairie, représentez ce que vous écrivez sur une feuille en python, c'est juste quelques fonctions comme le calcul du coefficient de la droite et l'ordonnée à l'origine.

    Le plus complexe c'est juste de déterminer la tolérance pour vérifier si un point appartient à une droite, car quand on joue avec des flottants, la précision n'est pas là...

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par carlita_84 Voir le message
    Existe t'il une librairie qui pourrait effectuer ce genre de calcul, comme trouver l'equation et savoir si un point gps appartient à une droite.
    Une librairie pour faire des multiplications et divisions ? Python le fait déjà au naturel.
    Apprendre à calculer l'équation d'une droite ça se fait en 3°. Tu prends 2 points A(Xa, Ya) et B(Xb, Yb) et un point M(x, y), alors le vecteur AM(x-xa, y-ya) est colinéaire avec AB(xb - xa, yb - ya). De là ça donne (y-ya)(xb - xa) - (x-xa)(yb - ya) = 0 et tu as ton équation. Ne reste qu'à développer et simplifier. Et si tu veux y en fonction de x ben tu passes y de l'autre côté.
    Quant à savoir si un point appartient à la droite c'est simple: soit il vérifie l'équation, soit il ne la vérifie pas.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Merci pour vos réponses, je vais essayer de coder sa

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    Hello,
    avec la partie linalg de numpy, c'est pas très compliqué de trouver l'équation d'une droite d'après des points:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from numpy import ones,vstack
    from numpy.linalg import lstsq
    points = [(5.084677441666667,43.868069425),
              (5.084690403333333,43.868060281666665)]
    x_coords, y_coords = zip(*points)
    A = vstack([x_coords,ones(len(x_coords))]).T
    m, c = lstsq(A, y_coords)[0]
    print("Line Solution is y = {m}x + {c}".format(m=m,c=c))
    mais comme le souligne fred1599 :
    Le plus complexe c'est juste de déterminer la tolérance pour vérifier si un point appartient à une droite, car quand on joue avec des flottants, la précision n'est pas là
    vu la précision de collecte des points GPS cela risque d'être difficile à réaliser.

    Ami calmant, J.P

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    vu la précision de collecte des points GPS cela risque d'être difficile à réaliser.
    je ne suis pas doué en math, mais il me semble que c'est simplement calculer si un point est dans un rectangle. Et il ne doit pas être trop difficile (même pour moi) de créer une fonction ligne_to_rect(x1,y2, x2,x3, largeur_tolerance) -> rect.

    EDIT: demande à chatgpt sans précision du contexte/librairies
    (avec le mot "perpendiculaire" en réponse, je suppose que c'est pas trop mal - pas testé)
    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
    import numpy as np
    import matplotlib.pyplot as plt
     
    def calculer_rectangle_autour_ligne(x1, y1, x2, y2, largeur):
        # Calculer la longueur de la ligne
        L = np.sqrt((x2 - x1)**2 + (y2 - y1)**2)
     
        # Vecteur unitaire perpendiculaire
        u = ((y2 - y1) / L, -(x2 - x1) / L)
     
        # Calculer les points du rectangle
        A1 = (x1 + largeur / 2 * u[0], y1 + largeur / 2 * u[1])
        A2 = (x1 - largeur / 2 * u[0], y1 - largeur / 2 * u[1])
        B1 = (x2 + largeur / 2 * u[0], y2 + largeur / 2 * u[1])
        B2 = (x2 - largeur / 2 * u[0], y2 - largeur / 2 * u[1])
     
        return A1, A2, B1, B2
    et en demandant, dans la foulée, sans lib externe, puisque ici elle (semble) inutile ...
    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
    import math
     
    def calculer_rectangle_autour_ligne(x1, y1, x2, y2, largeur):
        # Calculer la longueur de la ligne
        L = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
     
        # Vecteur unitaire perpendiculaire
        u_x = (y2 - y1) / L
        u_y = -(x2 - x1) / L
     
        # Calculer les points du rectangle
        A1_x = x1 + largeur / 2 * u_x
        A1_y = y1 + largeur / 2 * u_y
        A2_x = x1 - largeur / 2 * u_x
        A2_y = y1 - largeur / 2 * u_y
        B1_x = x2 + largeur / 2 * u_x
        B1_y = y2 + largeur / 2 * u_y
        B2_x = x2 - largeur / 2 * u_x
        B2_y = y2 - largeur / 2 * u_y
     
        return (A1_x, A1_y), (A2_x, A2_y), (B1_x, B1_y), (B2_x, B2_y)
    Et le "méchant" miaou, m'a écrit aussi point_dans_rectangle(), demain je pilote en temps réel une formule 1 via python

    équation d'une droite ça se fait en 3°
    Perso, j'ai quitté le 3ème il y a quelques décennies et je n'ai jamais fait depuis de la trigo, donc insurmontable à mon niveau

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Au premier abord l'idée qui me vient est la suivante :

    On a l’équation de la droite : y= ax+b

    On veut vérifier si le point (x1,y1) est sur cette droite avec une certaine marge/tolérance...

    Alors je dirais qu'on doit vérifier que : abs(y1-(ax1+b)) <= marge


    * abs = valeur absolue

  8. #8
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 922
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par Beginner. Voir le message
    Salut,

    Au premier abord l'idée qui me vient est la suivante :

    On a l’équation de la droite : y= ax+b

    On veut vérifier si le point (x1,y1) est sur cette droite avec une certaine marge/tolérance...

    Alors je dirais qu'on doit vérifier que : abs(y1-(ax1+b)) <= marge


    * abs = valeur absolue
    Je définirais la perpendiculaire à la droite qui passe par le point à tester. Je déterminerais la longueur du segment de droite résultant et vérifierais si elle est inférieure ou égale à la marge...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2019, 17h08
  2. Réponses: 15
    Dernier message: 30/11/2007, 15h36
  3. Comment faire pour qu'un clip suive une droite !
    Par ok07 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 17/09/2007, 11h26
  4. VBA_Excel-Pb pour trouver un nom dans une cellule
    Par martiweb dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/06/2007, 00h04
  5. requête pour trouver un mot dans une phrase
    Par FRIGAUX dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 25/11/2006, 22h18

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