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

  1. #21
    Membre régulier
    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
    Points : 112
    Points
    112
    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.
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  2. #22
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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

  3. #23
    Membre régulier
    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
    Points : 112
    Points
    112
    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+
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  4. #24
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

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

  5. #25
    Membre régulier
    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
    Points : 112
    Points
    112
    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
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    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 : 344
Taille : 4,2 Ko

  7. #27
    Membre régulier
    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
    Points : 112
    Points
    112
    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
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 367
    Points
    367

  9. #29
    Membre régulier
    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
    Points : 112
    Points
    112
    Billets dans le blog
    1
    Par défaut
    Aprés verification ton calcul "semble" correct !!
    voici la bonne méthode:
    il faut d'abord "dégauchir" la courbe afin d'avoir une équivalence exacte avec une fonction du second degré.

    Nom : exemple parabole.jpg
Affichages : 302
Taille : 738,9 Ko
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    J'ai calculé D avec le t obtenu et j'obtiens un point mais je ne vois pas du tout à quoi il correspond, tu avais une idée?
    Et je n'ai pas compris non plus l'utilité de dégauchir la courbe?
    Ce qui serait intéressant de savoir c'est comment on arrive aux équations de la courbe qui passe par le point M.

  11. #31
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358

  12. #32
    Membre régulier
    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
    Points : 112
    Points
    112
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BBouille Voir le message
    J'ai calculé D avec le t obtenu et j'obtiens un point mais je ne vois pas du tout à quoi il correspond, tu avais une idée?
    Et je n'ai pas compris non plus l'utilité de dégauchir la courbe?
    Ce qui serait intéressant de savoir c'est comment on arrive aux équations de la courbe qui passe par le point M.
    je te conseille de regarder le formulaire suivant à la page 11 (estimation de t) et 28 (parabole passant par 3 points): Pièce jointe 616249

    Dans to cas :
    1) définir xB et YB
    2) il faut estimer le paramètre t par la méthode des normes = (norme P0B)/(norme P0P2)
    3) calculer P1
    xP1 = (xB-(1-t)² xP0- t² xP2) / 2t(1-t)
    yP1 = (yB-(1-t)² yP0- t² yP2) / 2t(1-t)
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Je n'ai pas trouvé mon bonheur mais sûrement que je n'ai pas tout compris.
    Une parabole passant par 3 points ne trace pas la courbe que je voulais faire "manuellement" sur une feuille de papier.
    Voulant absolument trouver les paramètres d'une courbe quelconque pour créer des commandes SVG, j'ai continué le cas d'une courbe passant par 3 points.
    La courbe de Bézier quadratique ne convenant pas je suis passé à la cubique mais là il faut donc 2 courbes au lieu d'une.
    Une avant le point intermédiaire et une après.
    Voici à quoi ça ressemble au départ:
    Nom : Cubique_3_Points_1.png
Affichages : 293
Taille : 7,6 Ko
    Les tangentes au point P1 seront parallèles à la droite qui relie le point précédent au point suivant.
    On calcule les dx et dy entre P0 et P2 et on les reporte à gauche et à droite de P1.
    Les pentes en P0 et P2 seront parallèles à la normale en P1.
    Inconvénient il faut faire intervenir un coefficient réducteur pour rapprocher les points de contrôle des points de la courbe.
    Avec un coefficient d'1/3 voilà ce qu'on obtient.
    Nom : Cubique_3_Points.png
Affichages : 277
Taille : 8,0 Ko
    Ce qui m'a permis d'étendre ce principe à une courbe multi-points en partant des points du premier message de cette discussion.
    Nom : Cubique_n_Points.png
Affichages : 278
Taille : 14,7 Ko
    Là je n'ai pas trouvé mieux, pour le point contrôle du premier point on récupère la pente du point de contrôle du point suivant.
    Et pour le dernier on récupère la pente du point contrôle de l'avant-dernier point.
    Je ne sais pas si tout ça est correct mais à part la résolution de n équations à n inconnues je n'ai rien trouvé.
    À force de me creuser la tête je me suis dit qu'il n'y avait peut-être pas de courbe idéale pour relier des points à part de respecter les tangentes et c'est peut-être pour ça qu'on doit adapter la courbe à l'aide d'un coefficient qui je précise est le même pour tous les points de contrôle.

  14. #34
    Membre régulier
    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
    Points : 112
    Points
    112
    Billets dans le blog
    1
    Par défaut
    bonjour bbouille

    je suis en train de finaliser un algo qui lisse Npoints(300 max) par une cubique de bézier.
    Peut-tu nous faire parvenir les données de Départ ? (C.A.D. les coord des 5 points a lisser.)
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Ce sont les mêmes points que lors du premier message ou que ceux qu'on peut voir grâce au quadrillage.
    (0,0) (2,3) 3,2) (2,-1) (1,-1.5)

  16. #36
    Membre régulier
    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
    Points : 112
    Points
    112
    Billets dans le blog
    1
    Par défaut test lissage bbouille
    voici mon approximation
    Nom : test courbe Bbouille.jpg
Affichages : 272
Taille : 662,6 Ko

    si je compred bien, ton cas est spécial car tu veut que LES courbes passent par les points donnés donc ta méthode est BONNE

    Mon approximation est calculée en forçant les angles en P0 (0,0) = 75° et en P3(1 -1.5)=7°
    Elle peut etre beaucoup plus précise en faisant varier les angles (j'en suis pas a ce stade) elle ressembleras à mon approx. (avec des rondeurs) mais la courbe ne passera pas exactement par les points donnés.

    à ton service
    "le bonheur est la seule chose que l'on peut donner sans l'avoir" (Txiki)

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Oui je voulais passer par les points et ne donner aucune condition.
    Je pense avoir trouvé comment calculer le coefficient, il faut qu'aucun point de contrôle ne dépasse l'intersection des tangentes qui partent des extrémités de chaque courbe.
    On retient la distance entre chaque intersection et les points adjacents respectifs.
    On divise ces longueurs par la longueur des tangentes (au même endroit) et on retient le plus petit de ses rapports qui devient le coefficient réducteur.
    C'est pas très clair mais en le dessinant ça devrait l'être plus.
    Je n'ai pas essayé avec des courbes ou les rayons de courbure seraient fort différents les uns des autres mais on peut toujours décomposer la courbe principale en plusieurs tronçons.

  18. #38
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Avec un coefficient d'1/3 voilà ce qu'on obtient.
    Vous pouvez voir dans Excel le dessin des courbes a la main utilise cette méthode pour le lissage assez simple et pratique mais ne produit pas toujours le résultat escompté ..

    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        if Prv = nil then
       begin
         Curr.Left := Curr.Point;
         Curr.Right:= Curr.Point + (Nxt.Left-Curr.Point)/3;
       end else if Nxt = nil then
       begin
         Curr.Left:= Curr.Point + (Prv.Right-Curr.Point)/3;
         Curr.Right:= Curr.Point;
       end else begin
         Curr.Left := Curr.Point + (Prv.Point - Nxt.Point)/6;
         Curr.Right:= Curr.Point + (Nxt.Point - Prv.Point)/6;
       end;


    La courbe en rouge dessinée sur Excel la noire est par l'algo

    Nom : courbe.png
Affichages : 259
Taille : 398,5 Ko

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Et tu peux récupérer les points de contrôle pour les utiliser dans les cubiques SVG par exemple?

  20. #40
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Pour produire le cubic SVG smooth j'ai juste supprimer le premier point de contrôle et la courbe reste la même..
    en noir c'est la courbe générée par l'algo citée plus haut en jaune c'est son cubic smooth .

    Nom : Sa.png
Affichages : 255
Taille : 15,8 Ko

    SVG:
    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
    <?xml version="1.0"?>
    <svg xmlns="http://www.w3.org/2000/svg" >
      <path style="fill:none; stroke:#000000; stroke-opacity:1; stroke-width:4;"
    	d="M33,157 
    	C41.8889,134.222 59.6667,88.6667 94,81 
    	C128.333,73.3333 206.5,118 239,111 
    	C271.5,104 263.833,33.3333 289,39 
    	C314.167,44.6667 412,101.833 390,145 
    	C368,188.167 213.667,283.333 157,298 
    	C100.333,312.667 65.3333,261.333 50,233"/>
     
      <path style="fill:none; stroke:yellow; stroke-opacity:1; stroke-width:2;"
    	d="M33,157 
    	S59.6667,88.6667 94,81 
    	S206.5,118 239,111 
    	S263.833,33.3333 289,39 
    	S412,101.833 390,145 
    	S213.667,283.333 157,298 
    	S65.3333,261.333 50,233"/>	
    </svg>

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

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