IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Simple 3D Programming Using VPython

Programmation 3D simple en utilisant VPython

I. VPython: l'environnement Python/ Visual / IDLE

L'environnement de développement interactif que vous utiliserez est appelé "IDLE."

La fenêtre d'affichage

Lors de l'utilisation de VPython, la fenêtre graphique montre des objets en 3D.

(0,0,0) est le centre de la fenêtre graphique. L'axe +x est dirigé vers la droite, l'axe +y est dirigé vers le haut et l'axe +z pointe en direction de l'extérieur de l'écran, vers vous.

x, y et z sont mesurées dans n'importe quelle unité que vous choisissez; la scène est automatiquement redimensionnée convenablement. (Vous pourriez, par exemple, créer une sphère de rayon 1E-15 m pour représenter un noyau, ou une sphère de rayon 1E6 m pour représenter une planète, quoique cela n'aurait pas de sens de poser ces deux objets dans une même fenêtre graphique!)

La fenêtre de sortie

La sortie de chaque instruction -print- que vous exécutez dans votre programme va dans la fenêtre de sortie, qui est une fenêtre à texte déroulant. Vous pouvez utiliser cette fenêtre pour afficher des valeurs de variables, afficher des listes, des messages, etc. Placez-là où vous pouvez y voir des messages.

La fenêtre de code

Si vous tapez le simple programme suivant dans la fenêtre de code de l'IDLE et que vous le lancez (appuyez sur F5 ou utilisez le menu Run, vous verrez un affichage comme celui montré sur la figure en-dessous.

from visual import *

redbox=box(pos=vector(4,2,3), size=(8.,4.,6.),color=color.red)

greenball=sphere(pos=vector(4,7,3), radius=2, color=color.green)

Visual est le nom du module graphique 3D utilisé par le langage Python. VPython est le nom de la combinaison du langage Python, du module Visual et de l'environnement de développement IDLE.

Visualisation de la scène

Dans la fenêtre d'affichage, cliquez et déplacez avec le bouton droit de la souris (laissez appuyée la touche shift sur Macintosh). Déplacez à gauche ou à droite et vous tournez autour de la scène. Pour tourner autour de l'axe horizontal, déplacez la souris vers le haut ou le bas avec le bouton droit de la souris maintenu appuyé. Cliquez et déplacez vers le haut ou le bas la souris avec le bouton du milieu maintenu appuyé pour vous rapprocher ou vous éloignez de la scène (sur une souris à 2 boutons, maintenez appuyé le bouton gauche et droit de la souris; sur une souris à 1 bouton, maintenez appuyée la touche CTRL).

II. Entités Visual

Objets, noms et attributs

Les objets graphiques que vous créez, tels que les sphères, les boîtes, les courbes continuent d'exister pendant toute la durée d'exécution de votre programme, et le module graphique 3D de Visual continuera de les afficher partout où ils sont. Vous devez donner un nom à chaque objet (tel que redbox ou greenball dans l'exemple au-dessus) si vous souhaitez vous y référer de nouveau plus loin dans votre programme. Tous les objets ont des attributs: propriétés comme greenball.pos (la position de la sphère), greenball.color, et radius ou d'autres paramètres de taille. Si vous changez un attribut d'un objet, tel que sa position ou sa couleur, Visual affichera automatiquement l'objet dans sa nouvelle localisation ou avec sa nouvelle couleur.

Vous pouvez définir des valeurs des attributs dans le "constructeur" (le code utilisé pour créer un objet), et vous pouvez aussi modifier les attributs plus tard:

greenball.radius = 2.2

En plus de la définition de base des attributs, vous pouvez créer de nouveaux attributs. Par exemple, vous pouvez créer une sphère nommée moon; en plus de son rayon et de sa position, vous pouvez lui donner des attributs tels que sa masse (moon.mass) et son moment (moon.momentum).

Vecteurs

Les objets dans Visual ne sont pas tous des objets visibles. Par exemple, Visual permet de créer des quantités vectorielles 3D, et exécute des opérations vectorielles sur eux. Si vous créez une quantité vectorielle appelée a, vous pouvez vous référer à ses composantes telles que a.x, a.y, et a.z. Cependant, pour ajouter deux vecteurs a et b, vous n'avez pas besoin d'ajouter les composantes une à une; Visual effectuera l'addition vectorielle pour vous:

a = vector(1.,2.,3.)

b = vector(4.,5.,6.)

c=a+b

Si vous affichez c , vous verrez que c'est un vecteur de composantes (5.,7.,9.).

Multiplication scalaire

d = 3.*a # d est un vecteur de composantes (3., 6., 9.)

Norme vectorielle

d = mag(c) # d est un scalaire

z = mag(c)**2 # vous ne pouvez pas élever au carré un vecteur; simplement sa norme

Calculs vectoriels

f = cross(a,b) # produit vectoriel

g = dot(a,b) # produit scalaire

h = norm(a) # vecteur normé (unitaire)

Les attributs des objets Visual peuvent être des vecteurs, comme la vitesse ou le moment.

III. Eléments simples de programmation en Python

Importation du module graphique 3D (Visual)

La première ligne de votre programme doit être:

from visual import *

Commentaires

Un commentaire dans un programme Python commence par "#"

# cette ligne est un commentaire

Variables

Des variables peuvent être créées n'importe où dans un programme Python, simplement en assignant un nom de variable à une valeur. Le type de la variable est déterminé par l'instruction d'affectation.

a = 3 # un entier

b = -2. # un nombre à virgule flottante

c = vector(0.4, 3e3, -1e1) # un vecteur

Earth = sphere(pos=(0,0,0), radius=6.4e6) # un objet Visual

bodies = [ship, Earth, Moon] # une liste d'objets

Les objets basiques Visual tels que sphere() et box() ont un panel d'attributs tel que la couleur, et vous pouvez définir des attributs supplémentaires tels que la masse ou le moment. D'autres objets, tels que vector(), ont des attributs intégrés mais vous ne pouvez pas créer d'attributs supplémentaires. Les nombres, listes, et autres objets intégrés n'ont pas d'attributs du tout.

Avertissement à propos des divisions

La division d'entiers ne prendra pas le chemin que l'on attend, car le résultat est arrondi au plus proche entier inférieur. Ainsi:

a = 2/3

print a # a vaut 0

Pour éviter ceci, placez le point des décimaux après chaque nombre, comme ceci:

b = 2./3.

print b # b vaut 0.6666667, comme attendu

Nous recommandons d'écrire l'instruction suivante au début de votre programme; dans ce cas 2/3 vaudra 0.6666667; il y a 2 underscores avant et après le mot "future":

from __future__ import division

Elévation à une puissance

x**2 # et non x^2

10**-2 retourne une erreur; utilisez 10.**-2

Tests de logique

If, elif ("else if"), else:

if a == b: # regardez la table des expressions logiques ci-dessous

    c = 3.5 # code indenté exécuté si le test est vrai

elif a < b:

    c = 0. # c sera remis à zéro si a < b

else:

    c = -23.2

 

Expressions logiques

==

égal

!=

différent de (aussi <>)

<

plus petit que

>

plus grand que

<=

plus petit ou égal

>=

plus grand ou égal

or

ou logique

and

et logique

in

membre d'une séquence

not in

non membre d'une séquence

 

Listes

Une liste est une séquence ordonnée de n'importe quelle sorte d'objets. Elle est délimitée par des crochets.

moons = [Io, Europa, Ganymede, Callisto]

La fonction "arange" (raccourci de "arrayrange") crée une séquence de nombres:

angles = arange (0., 2.*pi, pi/100.)

# nombres de 0. à 2.*pi-(pi/100.) dans un pas de (pi/100.)

 

numbers = arange(10) # argument entier -> entiers

print numbers # [0,1,2,3,4,5,6,7,8,9]

 

Boucles

La plus simple des boucles en Python est la boucle "while". La boucle continue aussi longtemps que l'expression logique spécifiée est vraie:

while x < 23:

    x = x + vx*dt

Pour écrire une boucle infinie, utilisez simplement une expression logique qui sera toujours vraie:

while 1==1:

    ball.pos = ball.pos + (ball.momentum/ball.mass)*dt

Comme la valeur assignée à l'expression logique VRAI vaut 1, la suite produira aussi une boucle infinie:

while 1:

    a = b+c

Les boucles infinies conviennent parce que vous pouvez toujours interrompre le programme en choisissant "Stop Program" dans le menu Run de l'IDLE.

Il est aussi possible de boucler sur les membres d'une séquence:

moons = [Io, Europa, Ganymede, Callisto]

for a in moons:

    r = a.pos - Jupiter.pos

 

for x in arange(10):

# voir "listes" au-dessus

...

 

for theta in arange(0., 2.*pi, pi/100.):

# voir "listes" au-dessus

Vous pouvez redémarrer une boucle ou la terminer avant son terme:

if a == b: continue # retourne au début de la boucle

if a > b: break # sort de la boucle

 

Afficher des résultats

Pour afficher un nombre, un vecteur, une liste, ou autre chose utilisez la commande "print":

print Europa.momentum

Pour afficher un message texte, encadrez-le par des cotes:

print "We have just crashed on the Moon with speed", v, "m/s."

Plus d'informations sur Python

Voir Le module Visual de VPython pour une description détaillée de tous les aspects de Visual.

Nous avons résumé un très petit sous-ensemble du langage de programmation Python. Une Documentation Python plus vaste est fournie ici, et il y a des informations supplémentaires sur le site web de Python, mais beaucoup de ces informations supposent que vous ayez déjà une bonne expérience de la programmation dans d'autres langages. Nous recommandons le livre suivant à ceux qui veulent en apprendre plus sur Python: Learning Python, par Mark Lutz & David Ascher, 1999, O'Reilly.


Copyright © 2006 Guillaume et Yoann Duriaud. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.