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

  1. #1
    Membre à l'essai
    Inscrit en
    mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 44
    Points : 17
    Points
    17

    Par défaut points intersection courbes

    Bonjour tout le monde, j'ai un petit probleme.

    En fait je dispose d'un ensemble de points correspondant à deux courbes, les valeurs de la courbe1 sont stockées dans le vecteur 1 et les valeurs de la courbe 2 dans le vecteur 2.

    Ces deux courbes se croisent si on les traces avec excel....

    Je voudrait donc savoir s'il est possible de déterminer les coordonnées des points d'intersections par interpolations entre les points que je donne avec python.

    merci par avance

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : juillet 2006
    Messages : 883
    Points : 1 056
    Points
    1 056

    Par défaut

    Bien sur que c'est possible

    Prend la première entrée des deux vecteurs, regarde laquelle est la plus grande.

    Il te suffit ensuite d'itérer les deux vecteurs en même temps, et dès que l'ordre de grandeur s'inverse, tu as ton point d'intersection. Point qui se trouve donc entre ceux que tu viens d'itérer et ceux d'avant.

  3. #3
    Membre à l'essai
    Inscrit en
    mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 44
    Points : 17
    Points
    17

    Par défaut

    Alors, en fait je vois ce que tu veux dire mais je voudrai plus précisément les coordonnées du point. Avec ce que tu fait je peu tirer le milieu des deux points entre lesquels sa se croise mais moi je voudrai quelque chose de plus précis. Pense tu pouvoir faire autrement???

  4. #4
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : juillet 2006
    Messages : 883
    Points : 1 056
    Points
    1 056

    Par défaut

    Tu as droit à l'équation ?
    Si oui, tu peux la charger dans une matrice et faire des calculs plus exacts.

    Si non, tu peux toujours comparer la "vitesse" de la courbe (la dérivée quoi, mais comme tu n'as pas l'équation...), en prenant la différence entre le y des points x et x - 1 (si x est le point où tu es).
    Ensuite tu peux faire une moyenne pondérée du tout pour avoir une réponse plus précise.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 418
    Points : 1 651
    Points
    1 651

    Par défaut

    En fait je dispose d'un ensemble de points...
    Pourquoi «en fait» ?





    «un ensemble de points correspondant à deux courbes, les valeurs de la courbe1 sont stockées dans le vecteur 1 et les valeurs de la courbe 2 dans le vecteur 2»
    donc il y a 1 ensemble et 2 vecteurs ?






    - J'ai déjà eu l'occasion d'écrire que je considère l'emploi du mot "vecteur" pour désigner ce qui semble être une variable dans un programme comme fort peu adapté. Je me demande même si ce n'était pas déjà à toi.
    Je ne vois pas ce qui permettrait d'envisager un objet Python comme étant vectorisé, c'est à dire ayant une direction, un sens et une longueur=une intensité (l'appellation est variable) et pouvant, dans un espace repéré par des axes de coordonnées, être mis en correspondance avec un couple de points. Au contraire, le fait que tes "vecteurs" contiennent plusieurs points les éloigne de cette notion.
    En outre, faire appel ainsi à une notion dévoyée de son sens pour exposer son problème, c'est s'exposer à induire dès le départ une ambiguïté et donc de décourager un lecteur de s'intéresser au probléme.






    «Je voudrait donc savoir s'il est possible de déterminer les coordonnées DES pointS d'intersectionS »
    donc les 2 courbes se croisent plusieurs fois ?
    «mais je voudrai plus précisément les coordonnées DU point»
    donc il n'y a plus qu'UN point ?
    ou alors est-ce dans le cadre d'une réponse à Antoine 935 ?
    on-n-en-sait-ri-en






    «Prend la première entrée des deux vecteurs»
    Les deux vecteurs ont la même entrée ?






    «Point qui se trouve donc entre ceux que tu viens d'itérer..... »
    On n'itère pas UN quelque chose, on itère sur une séquence de quelques choses. Ici le quelque chose est un couple de points.






    «je peu tirer le milieu des deux points »
    C'est du ball-trap ? Et il manque des balles ?






    - La solution de Antoine 935 n'est valable que si pour chacun des couples de points, les deux abscisses des deux points sont identiques.
    Tant que cette condition n'est pas explicitement exprimée dans l'énoncé, aucun programmeur ne va se lancer à l'aveuglette dans une recherche de solution sur des bases aussi fumeuses.






    - Une autre information manque.
    « je dispose d'un ensemble de points correspondant à deux courbes»
    S'agit-il de courbes représentatives de 2 fonctions mathématiques ou de courbes expérimentales ?
    Autrement dit, les points sont ils liés mathématiquement ou statistiquement ? S'agit-il d'évaluer avec le plus de précision permise par la machine utilisée les coordonnées d'une intersection exacte (ou de plusieurs?) par approximations successives ou de déterminer une intersection sans valeur absolue de deux courbes représentant le mieux possible deux "nuages" de points statistiques ?



    Des problèmes posés ainsi, ça me donne l'impression qu'il faut chercher non seulement la réponse mais aussi la question.

  6. #6
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : juillet 2006
    Messages : 883
    Points : 1 056
    Points
    1 056

    Par défaut

    Citation Envoyé par eyquem Voir le message
    Je ne vois pas ce qui permettrait d'envisager un objet Python comme étant vectorisé, c'est à dire ayant une direction, un sens et une longueur=une intensité (l'appellation est variable)
    Ce que l'on nomme vecteur, en programmation, c'est un tableau redimensionnable. Du moins tous les gens qui m'entourent ont cette compréhension du vecteur, mais il est vrai que nous avons tous des bases de cpp derrière, ça peut jouer.

    On n'itère pas UN quelque chose, on itère sur une séquence de quelques choses. Ici le quelque chose est un couple de points.
    C'est très juste, au temps pour moi.

    La solution de Antoine 935 n'est valable que si pour chacun des couples de points, les deux abscisses des deux points sont identiques.
    Ca me paraissait tellement logique que j'ai oublié de le dire.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 723
    Points : 954
    Points
    954

    Par défaut

    Je pense que ce qu'il veut, c'est l'intersection des courbes d'interpolation que fait Excel. A toi de choisir comment tu interpoles... Polynômes de Lagrange, Splines, ...

    Concernant la dénomination vecteur, pour moi l'origine est mathématique, un vecteur c'est un élément d'un espace vectoriel, en l'occurrence R^n, où n est le nombre de composantes.

  8. #8
    Membre à l'essai
    Inscrit en
    mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 44
    Points : 17
    Points
    17

    Par défaut

    Bonjour, tout d'abord je tiens vraiment à remercier eyquem pour son intervention concernant le langage que j'ai utiliser lors de ma dernière intervention sur ce forum.
    La question n'est pas pourquoi j'utilise "en fait " au début de mes phrases mais bien comment est ce que l'on peut être assez sadique et inutile pour signaler ce genre de détail...
    D'autre part, les allusions mathématiques dont tu fait part (de niveau lycée!!!) concernant la notion de vecteur sont (encore une fois inutiles) et complètement fausses dans le contexte de ma dernière demande. Je remercie d'ailleurs Antoine 935 d'avoir recadré les choses et te renvoi à son mail pour t'informer de l'emploi du terme vecteur en programmation.
    EN FAIT, je n'ai pas le temps de revoir toutes tes critiques par manque de temps (et oui je n'ai pas que sa à faire moi!!) mais j'ai tout de même apprécier ton humour et l'histoire du ball-trap.....encore une fois inutile mais très drôle...si si jt'assure j'ai rigolé....de pitié.

    Si non, oiffrig tu as tout à fait raison c'est bien l'intersection des courbes d'interpolation que fait Excel dont j'ai besoin. Pour l'interpolation, est-ce qu'il existe des fonctions dans python pour trouver cela?

    Merci

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 723
    Points : 954
    Points
    954

    Par défaut

    Je ne crois pas qu'il y ait quoi que ce soit de déjà fait, à vérifier, mais tu as de nombreuses possibilités pour l'interpolation : Polynômes de Lagrange, Splines, ... Déjà, il faudrait savoir ce qu'utilise Excel si tu veux à tout prix faire pareil.

  10. #10
    Modérateur
    Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    janvier 2009
    Messages
    768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : janvier 2009
    Messages : 768
    Points : 1 424
    Points
    1 424

    Par défaut

    Pour calculer les intersections de courbes, tu peux peut-être utiliser un package nommé Shapely et le détourner de sa première utilisation. C'est un package qui s'appuye sur une bibliothèque C/C++ nommée GEOS (Geometry Engine Open Source), qui est elle-même le portage de la "bibliothèque" JTS (Java Topology Suite) utilisée dans différents SIG (Système d'Information Géographique), comme OpenJump.

    C'est utilisé (je l'utilise) pour des problèmatiques de "cartes" numériques et de topologie pour constituer des données utilisées ensuite dans des SIG.

    Il est clair que tu dois d'abord utiliser des outils d'interpolation pour, à partir d'une série (limitée) de points, établir une liste de coordonnées (x,y). Les intersections calculées par Shapely se font sur les segments de droites reliant les points successifs.

    Shapely se retrouve facilement sur www.python.org dans les packages proposés.

    Une petite démo pour calculer les intersections entre sinus et cosinus dans [0,2*pi]

    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
     
    plx@sony:~$ python
    Python 2.5.2 (r252:60911, Oct  5 2008, 19:24:49) 
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import math
    >>> from shapely.geometry import LineString
    >>> list_x = [ 2.*math.pi/5000*i for i in range(5001) ]
    >>> courbe_sinus = [ (list_x[i],math.sin(list_x[i])) for i in range(5001) ]
    >>> courbe_cosinus = [ (list_x[i],math.cos(list_x[i])) for i in range(5001) ]
    >>> sinus = LineString(courbe_sinus)
    >>> cosinus = LineString(courbe_cosinus)
    >>> intersections = sinus.intersection(cosinus)
    >>> type(intersections)
    <class 'shapely.geometry.multipoint.MultiPoint'>
    >>> for geom in intersections.geoms:
    ...     print geom.wkt
    ... 
    POINT (0.7853981633974483 0.7071067811865476)
    POINT (3.9269908169872418 -0.7071067811865475)
    Calculer l'intersection entre 2 segments de droite semble facile mais, dans mon domaine, je peux, tous les jours, faire l'expérience que traiter 95% des cas est très simple, mais gérer les 5% restants demande une débauche d'énergie. C'est pour cela que j'ai pensé à te proposer ce package.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  11. #11
    Membre à l'essai
    Inscrit en
    mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 44
    Points : 17
    Points
    17

    Par défaut

    ok je vais essayer d'appliquer sa à mon cas ...

    merci pour ton aide

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/09/2009, 22h02
  2. points intersection courbes
    Par anthonystaltaro dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/06/2009, 15h12
  3. Intersection courbe droites
    Par Medde dans le forum Mathématiques
    Réponses: 8
    Dernier message: 26/02/2009, 20h44
  4. Calculer point intersection droite
    Par cetiop dans le forum C
    Réponses: 7
    Dernier message: 21/01/2008, 22h26

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