+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  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 :
    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 Olivier
    Ingénieur-Chercheur
    Inscrit en
    février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •