p
u
b
l
i
c
i
t
é
publicité

Discussion: Surface de Bézier

  1. #1
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2012
    Messages : 7
    Points : 3
    Points
    3

    Par défaut Surface de Bézier

    Bonjour,
    Je débute en Python et je voudrais coder la surface de Bézier décrite dans le lien :
    http://www.paris-lavillette.archi.fr...e_BezierTC.htm
    dans la partie: 1.1 Les carreaux de Bézier
    et voici mon programme:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import math
    import time
    import random
    import numpy
    import scipy
    from scipy import misc
    def P(U,V):
        # les degrés
        m = 3
        n = 3
        #mes points de contrôle Pij sont:
        Pij = [[[-1.5, -1.5, 4.0], [-0.5, -1.5, 2.0],
        [0.5, -1.5, -1.0], [1.5, -1.5, 2.0]],
        [[-1.5, -0.5, 1.0], [-0.5, -0.5, 3.0],
        [0.5, -0.5, 0.0], [1.5, -0.5, -1.0]],
        [[-1.5, 0.5, 4.0], [-0.5, 0.5, 0.0],
        [0.5, 0.5, 3.0], [1.5, 0.5, 4.0]],
        [[-1.5, 1.5, -2.0], [-0.5, 1.5, -2.0],
        [0.5, 1.5, 0.0], [1.5, 1.5, -1.0]]]
        #Je construis les polynômes de Bernstein:
        Bm = []
        Bn = []
        for i in range(m):
            Bim = scipy.misc.comb(m,i) * pow(U,i) * pow((1-U),m-i)
            Bm.append(Bim)
            Bm = numpy.array(Bm)
        for j in range(n):
            Bjn = scipy.misc.comb(n,j) * pow(V,j) * pow((1-V),n-j)
            Bn.append(Bjn)
            Bn = numpy.array(Bn)
        # Ensuite je calcule ma surface P:
        p = []
        for i in range (m):
            sum1 = 0
            sum2 = 0
            sum3 = 0
            p1 = []
            p2 = []
            p3 = []
            for j in range(n):
                sum1 += Bm[i]*Bn[j]* pij[i][j][0]
                sum2 += Bm[i]*Bn[j]* pij[i][j][1]
                sum3 += Bm[i]*Bn[j]* pij[i][j][2]
                p1.append(sum1)
                p2.append(sum2)
                p3.append(sum3)
            s1 = sum(p1)
            s2 = sum(p2)
            s3 = sum(p3)
            p.append(s1)
            p.append(s2)
            p.append(s3)
        return p
    ensuite pour mes valeurs U et V, je construis un vecteur de tuples de valeurs aléatoires entre 0 et 1, et j'applique ma fonction à chaque tuple (U,V) du vecteur, ce qui devrait me donner ma surface de Bézier lisse,
    quand j'essaye de visualiser ma surface avec pylab, je ne retrouve pas la bonne surface de Bézier, j'ai dû me tromper dans l'algo, mais je ne trouve pas l'erreur, pourriez vous m'aider svp?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur-Chercheur
    Inscrit en
    février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur-Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : février 2010
    Messages : 12
    Points : 16
    Points
    16

    Par défaut

    Bonjour,

    Pour m=3, lorsque vous faites "for i in range(m)", i prend successivement les valeurs 0, 1 et 2(=m-1).
    Or, pour le calcul des courbes de Bezier, en respectant la référence fournie, il faut que i décrive les entiers de 0 à m (inlcus). Donc il fait retailler vos boucles en "for i in range(m+1)". Idem sur n !

    Cordialement,
    OSP

  3. #3
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2012
    Messages : 7
    Points : 3
    Points
    3

    Par défaut

    Je vous remercie pour votre réponse, mais il n'y a pas que ça comme erreur, car même en changeant les indices ( j'ai mis les n+1 comme vous m'avez dit), ça marche pas!

  4. #4
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2012
    Messages : 7
    Points : 3
    Points
    3

    Par défaut

    mon programme fonctionne bien maintenant,
    il était un petit peu en désordre : quelques déclarations qui n'étaient pas au bon endroit + indentation dans les boucles .

    Merci pour votre aide

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

Discussions similaires

  1. Surface de Bézier GLSL
    Par MrVylsain dans le forum OpenGL
    Réponses: 1
    Dernier message: 13/11/2012, 09h14
  2. Algorithme surface de Bézier
    Par MrVylsain dans le forum Mathématiques
    Réponses: 1
    Dernier message: 13/11/2012, 09h01
  3. Intersection plan et surface Bézier
    Par coberle dans le forum Mathématiques
    Réponses: 2
    Dernier message: 06/05/2008, 15h17
  4. [Surfaces] Carreaux de bézier
    Par bigquick dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/07/2006, 23h12
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

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