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 :

Courbe de Bézier passant par des points donnés


Sujet :

Mathématiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut Courbe de Bézier passant par des points donnés
    Bonjour,

    J'ai grosso modo le besoin suivant pour une application:
    "l'utilisateur place des points d'une courbe 2D dans une zone de dessin, et il faut dessiner la "courbe" qui passe par ces points"

    Vu les contraintes techniques, on s'oriente vers du SVG pour le rendu, donc vers des courbes de bézier.
    Je cherche donc comment il est possible de déterminer rapidement (réactivité de l'interface) les points de controles d'une courbe de bézier à partir de points où elle doit passer. Et aussi de savoir combien de points de contrôles il faut en fonction des points placés. Je vois plein de programmes réaliser ce genre de chose couramment, mais je ne trouve pas d'algorithme standard pour le faire.

    Voir en attachement une idée du visuel auquel je veux arriver.
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Vu les contraintes techniques, on s'oriente vers du SVG pour le rendu, donc vers des courbes de bézier.
    Je cherche donc comment il est possible de déterminer rapidement (réactivité de l'interface) les points de controles d'une courbe de bézier à partir de points où elle doit passer. Et aussi de savoir combien de points de contrôles il faut en fonction des points placés. Je vois plein de programmes réaliser ce genre de chose couramment, mais je ne trouve pas d'algorithme standard pour le faire.
    ET bien, c'est parce qu'il n'y a pas vraiment d'algorithme pour faire cela.

    Il s'agit simplement de relier le debut d'un segment à la fin du précédent, comme on le ferait pour une ligne continue par morceaux. Les points de contrôle servent uniquement pour "arrondir" les segments.

    L'astuce c'est simplement de prendre des points de controle qui sont "miroirs" l'un de l'autre pour l'extrémité commune à 2 segments, afin qu'il n'y ait pas de cassure. C'est d'ailleurs expliqué dans la spec du SVG, cf. la dernière courbe en "S" où le point de controle bleu est miroir de l'autre par rapport au point de passage.



    Tout ce qu'il reste à choisir c'est l'orientation des "tiges de contrôle" (= segment formé par une extrémité et le point de contrôle associé). Une méthode simple c'est de prendre la même orientation que la droite reliant les points précédent/suivant. Dans ton exemple, la tige de contrôle du point "2" serait parallèle à la droite "1"-"3".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    mm non, ce n'est pas le but. L'utilisateur n'a pas à choisir les point de controle. Lui il dessine des point de passage et c'est tout. Pour reprendre ton image, c'est comme si, pour chacune des courbes, l'utilisateur avait donné 4 points. A partir de ces quatres points, en supposant le premier et le dernier comme le début et fin de la courbe, il faut calculer les deux points de controle pour que la courbe passe par les deux autres points données par l'utilisateur. Bref, il doit y avoir moyen de dessiner un courbe "naturelle".

    Si tu as déjà essayé de dessiner avec des points de controle bézier une courbe qui passe par des points déterminé, tu peux comprendre la complexité de la chose (on change un truc ça bouge à l'autre bout), donc ce n'est productivement pas envisageable pour la performance de l'utilisateur. Lui, il veux bouger des points "sur la courbe".

    Maintenant j'ai trouvé une solution qui s'appelle "natural spline", mais les spline, c'est pas du bézier -> ça rentre pas dans le svg final


    Pour donner une idée, je dois obtenir à partir des points donnés par l'utilisateur une courbe qui s'approche de ce que sort calc ou excel avec un graphe "x,y courbe"

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    mm non, ce n'est pas le but. L'utilisateur n'a pas à choisir les point de controle. Lui il dessine des point de passage et c'est tout. Pour reprendre ton image, c'est comme si, pour chacune des courbes, l'utilisateur avait donné 4 points. A partir de ces quatres points, en supposant le premier et le dernier comme le début et fin de la courbe, il faut calculer les deux points de controle pour que la courbe passe par les deux autres points données par l'utilisateur. Bref, il doit y avoir moyen de dessiner un courbe "naturelle".
    Bon, c'est de ma faute. Je n'ai pas été assez clair.

    1. la courbe finale passe TOUJOURS par les points passages, pour la bonne raison qu'on dessine la courbe morceau par morceau et que chaque morceau est une courbe de bezier définie par 2 points de passages consécutifs + 2 points de contrôle.

    2. L'utilisateur n'a pas à choisir les points de contrôle: la position des points de contrôle est calculée automatiquement en prenant comme règle que la "tige de contrôle" d'un point de passage est parallèle à la droite formée par les points de passages précédent/suivant.

    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je vois ce que tu veux dire. Seulement avec cette méthode j'ai un problème.
    A partir de deux points, points de passage, je me retrouve à devoir déterminer déterminer 4 points: deux points de passage et deux points de controle. En rajoutant la contrainte "parallèle", je peux donc forcer un troisième paramètre de mon équation. Mais il reste une inconnue: quelle "distance" donner aux points de controle (au delà de la courbe)

    Je vais déjà faire des essais

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    bon j'ai fait quelques essais. voir la pièce jointe. En bleu le tracé d'origine (lignes droites). En vert ce qu'on obtient en respectant les pentes pour les deux points. Et encore, en ajustant au visu l'intensité (distance) des controles. En rouge ce que me propose automatiquement inkscape quand je fait ctrl-clic sur les sommets et qui est le genre de courbe que je cherche à obtenir.

    Question fondamentale, une idée sur l'algorithme qu'il utilisent?


    Je cherche (si ça peux aider) à obtenir quelque chose d'aussi intuitif que ça

    http://www.cse.unsw.edu.au/~lambert/.../natcubic.html
    Images attachées Images attachées  

  7. #7
    Membre actif
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Billets dans le blog
    1
    Par défaut approximation de bezier
    Citation Envoyé par tchize_ Voir le message
    Bonjour,

    J'ai grosso modo le besoin suivant pour une application:
    "l'utilisateur place des points d'une courbe 2D dans une zone de dessin, et il faut dessiner la "courbe" qui passe par ces points"

    Vu les contraintes techniques, on s'oriente vers du SVG pour le rendu, donc vers des courbes de bézier.
    Je cherche donc comment il est possible de déterminer rapidement (réactivité de l'interface) les points de controles d'une courbe de bézier à partir de points où elle doit passer. Et aussi de savoir combien de points de contrôles il faut en fonction des points placés. Je vois plein de programmes réaliser ce genre de chose couramment, mais je ne trouve pas d'algorithme standard pour le faire.

    Voir en attachement une idée du visuel auquel je veux arriver.
    voici en pièce jointe un algorithme Pièce jointe 153701

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    merci pour le doc, j'y jetterais un oeil. Au final, on est parti sur l'idée de laisser simplement l'utilisateur positionner les points de contrôle plutôt que de dessiner la courbe et ça leur convient.

  9. #9
    Membre actif
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    merci pour le doc, j'y jetterais un oeil. Au final, on est parti sur l'idée de laisser simplement l'utilisateur positionner les points de contrôle plutôt que de dessiner la courbe et ça leur convient.
    ----------------------------------------------------------------------------------------------------------------------

    Je vous comprend et j'ai trouvé une solution "un peut lourde" qui peut satisfaire vos utilisateurs.
    Il suffit de créer une "POLYLIGNE" avec un logiciel type AUTOCAD , ABViewer etc..
    d'exporter ce fichier dans un format lisible par INSCAPE (svg, dxf, eps etc...)

    - ouvrir le fichier avec INSCAPE , selectionner l'objet
    - aller dans le menu "Chemin" et cliquer "Simplifier" => cela transforme votre polyligne en courbes de Bezier.

    l'utilisateur pourra ainsi (peut être) exporter l'objet dans un format lisible par votre application.

    Mais je continue à travailler sur ce sujet afin de trouver une solution algorithmique sur le problème
    (ardu pou moi) des approximations des courbes de bézier.

    En attendant, bonne continuation.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ouais mais non, l'utilisateur dois pouvoir réaliser une animation composée d'une 30 aines de points en moyenne, animés sur 300 images en environ 40 minutes, donc une procédure longue ce n'est même pas envisageable
    Ca leur laisse environ 60 secondes pour dessiner une courbes

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    J'ai l'impression d'entendre un disque rayé là

  12. #12
    Membre actif
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    merci pour le doc, j'y jetterais un oeil. Au final, on est parti sur l'idée de laisser simplement l'utilisateur positionner les points de contrôle plutôt que de dessiner la courbe et ça leur convient.
    ----------------------------------------------------------------------------------------------------------------------------
    BONJOUR

    si j'ai bien lu vos messages vous disposez d'une définition de vos courbes en splines.

    voici un lien qui traite du sujet : conversion de B-splines en Bezier et inversement

    http://www.liafa.jussieu.fr/~carton/...g/splines.html

    A mon avis cela à l'air très simple et très efficace.

    A+

  13. #13
    Membre actif
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Billets dans le blog
    1
    Par défaut Formulaire courbes de Bézier
    Ce formulaire peut vous aider

    https://www.fichier-pdf.fr/2019/03/0...ire-9-03-2019/

    Pièce jointe 456412


    Calcul du lissage par 7 points
    Pièce jointe 456920

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 265
    Par défaut Courbe de Bézier quadratique passant par 3 points
    Bonjour les amis,
    Ayant beaucoup ramé pour essayer de faire passer une courbe de Bézier par 3 points je voulais ajouter un élément qui peut-être sera utile à quelqu'un un jour.
    Le problème au départ était de donner une valeur au paramètre t pour avoir une courbe la "plus approchante" de celle qu'on dessinerait à la main pour relier 3 points.

    Nous avons donc l'équation de Bézier quadratique: B(t)= (1-t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2.
    Nous avons les 3 points A, B, C (P0, P1, P2).
    On calcule les coefficients de la droite passant par A et C : AC = a*x + b
    On calcule les coefficients de la droite passant par B et perpendiculaire à AC : BD = m*x + d sachant que m = -1/a
    On obtient les coordonnées du point D :
    xD = ( d - b )/( a - m )
    yD = a*xD + b
    On calcule le rapport des distances AD/AC (Rapport_Dist)
    Et on prendra alors la valeur pour t = Rapport_Dist.
    Je suis peut-être à côté de la plaque mais je n'ai rien trouvé de mieux pour le moment.
    Nom : Quad_3_points.png
Affichages : 492
Taille : 4,2 Ko

  15. #15
    Membre actif
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Billets dans le blog
    1
    Par défaut
    bonjour
    Ton calcul est correct.
    faut quand même le vérifier en calculant D avec le t calculé :
    xD(t) = (1-t)² xP0 + 2t(1-t) xP1 + t² xP2
    yD(t) = (1-t)² yP0 + 2t(1-t) yP1 + t² yP2

  16. #16
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963

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

Discussions similaires

  1. Tracer une courbe de Bézier passant par 5 points définis
    Par sara.ber dans le forum Mathématiques
    Réponses: 3
    Dernier message: 07/05/2022, 12h12
  2. Comment changer des virgules par des points
    Par solorac dans le forum Excel
    Réponses: 2
    Dernier message: 30/07/2007, 10h38
  3. Réponses: 6
    Dernier message: 03/05/2007, 13h42
  4. Surface passant par des points
    Par Youn05 dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 13h28
  5. [math] equ sinusoide passant par deux points
    Par ddams dans le forum Mathématiques
    Réponses: 11
    Dernier message: 24/05/2003, 14h12

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