Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compréhension des courbes NURBS

    19 octobre 2024 à 19:34:52

    Bonsoir à toutes et à tous,

    J'ai fini par implémenter un code C++ (cf. le sujet sur le forum C++ qui a une autre version) partant du code Python de geomdl sur les NURBS mais la question n'est pas encore vraiment ici.

    J'ai voulu tracer la courbe dont l'équation, qui est à la page 35 ici, devant représenter un cercle.

    Avec mon code, je n'arrive pas à obtenir le cercle.

    Via Octave (code ci-dessous), j'obtiens un triangle (je ne sais pas si les poids sont pris en compte).

    pkg load nurbs
    
    cntrl = [1 0 0 1.0;
             0 0 0 0.5;
             0.5 sqrt(3) / 2 0 1.0;
             1 sqrt(3) 0 0.5;
             1.5 sqrt(3) / 2 0 1.0;
             2 0 0 0.5;
             1 0 0 1.0]
    knots = [0 0 0 1 1 2 2 3 3 3]
    crv = nrbmak(transpose(cntrl), knots);
    crv.coefs #les poids sont bien dans les données de la structure
    nrbplot(crv, 3);

    Avec le code Python (ci-dessous inspiré d'ici), j'ai une fenêtre blanche sans erreur.

    from geomdl import BSpline
    from geomdl.visualization import VisMPL
    from math import sqrt
    
    curve = BSpline.Curve()
    curve.degree = 2
    curve.ctrlpts = [[1, 0, 0, 1],
                     [0, 0, 0, 0.5],
                     [0.5, sqrt(3) / 2, 0, 1],
                     [1, sqrt(3), 0, 0.5],
                     [1.5, sqrt(3) / 2, 0, 1],
                     [2, 0, 0, 0.5],
                     [1, 0, 0, 1]]
    curve.knotvector = [0, 0, 0, 1 , 1, 2, 2, 3, 3, 3]
    curve.delta = 0.001
    
    curve.evaluate()
    
    vis_comp = VisMPL.VisCurve3D()
    curve.vis = vis_comp
    curve.render()

    Du coup, je ne sais pas trop quoi en penser...

    Est-ce que quelqu'un saurait m'éclairer sur cette thématique ?

    Merci,

    P'tit Ju

    EDIT : Avec le code Python ci-dessous, je n'obtiens pas tout à fait un cercle car je ne vois pas comment appliquer les poids avec geomdl...

    from geomdl import BSpline
    from geomdl.visualization import VisMPL
    from math import sqrt
    
    curve = BSpline.Curve()
    curve.degree = 2
    curve.ctrlpts = [[1, 0],
                     [0, 0],
                     [0.5, sqrt(3) / 2],
                     [1, sqrt(3)],
                     [1.5, sqrt(3) / 2],
                     [2, 0],
                     [1, 0]]
    curve.knotvector = [0, 0, 0, 1 , 1, 2, 2, 3, 3, 3]
    curve.delta = 0.001
    
    curve.evaluate()
    
    vis_comp = VisMPL.VisCurve2D()
    curve.vis = vis_comp
    curve.render()

    EDIT2 : Pour les poids, j'ai fini par réussir en Python avec le code suivant.

    from geomdl import NURBS
    from geomdl.visualization import VisMPL
    from math import sqrt
    
    curve = NURBS.Curve()
    curve.degree = 2
    curve.ctrlpts = [[1, 0],
                     [0, 0],
                     [0.5, sqrt(3) / 2],
                     [1, sqrt(3)],
                     [1.5, sqrt(3) / 2],
                     [2, 0],
                     [1, 0]]
    curve.weights = [1, 0.5, 1, 0.5, 1, 0.5, 1]
    curve.knotvector = [0, 0, 0, 1 , 1, 2, 2, 3, 3, 3]
    curve.delta = 0.001
    
    curve.evaluate()
    
    vis_comp = VisMPL.VisCurve2D()
    curve.vis = vis_comp
    curve.render()



    -
    Edité par P'tit Ju 20 octobre 2024 à 15:03:35

    • Partager sur Facebook
    • Partager sur Twitter
    Le premier et meilleur outil de l'Homme reste encore et toujours son cerveau.
      14 novembre 2024 à 19:22:11

      J'ai continué à travailler sur la thématique et j'ai voulu extraire les courbes iso-lignes d'une surface NURBS mais je ne vois pas comment traiter les cas limites que sont les bords de la surface. Pour information, j'ai fait une PR sur le GitHub de geomdl en utilisant le code du split de surface pour extraire les iso-lignes.

      Est-ce que quelqu'un aurait à tout hasard une astuce ?

      • Partager sur Facebook
      • Partager sur Twitter
      Le premier et meilleur outil de l'Homme reste encore et toujours son cerveau.

      Compréhension des courbes NURBS

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown