Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Déploiement/Installation
Déploiement/Installation Forum d'entraide sur le déploiement d'applications et sur l'installation/compilation de bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/06/2012, 14h04   #1
asmaeH
Invité de passage
 
Femme
Étudiant
Inscription : 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?
asmaeH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2012, 10h45   #2
OliSharkPython
Futur Membre du Club
 
Homme Olivier
Ingénieur-Chercheur
Inscription : 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
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
OliSharkPython est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2012, 09h36   #3
asmaeH
Invité de passage
 
Femme
Étudiant
Inscription : 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
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!
asmaeH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2012, 10h00   #4
asmaeH
Invité de passage
 
Femme
Étudiant
Inscription : 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
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
asmaeH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h27.


 
 
 
 
Partenaires

Hébergement Web