IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Description of Objects in VPython

La courbe (curve)

La courbe affiche des lignes droites entre des points et si les points sont suffisamment proches les uns des autres, vous obtiendrez l'apparence d'une courbe lisse. En plus de son usage basique pour l'affichage de courbes, la courbe a de puissantes capacités pour d'autres usages, comme le tracé efficace de fonctions.

Plusieurs attributs, tels que pos et color, peuvent être différents pour chaque point de la courbe. Ces attributs sont stockés en tant que tableaux Numeric. Le module Numeric pour Python fournit des possibilités de traitements puissants sur les tableaux; par exemple, deux tableaux peuvent être ajoutés. Les tableaux Numeric sont accessibles en utilisant les règles standard de Python pour faire référence au nième item d'une séquence (ainsi, seq[0] est le premier item de seq, seq[1] est le deuxième, seq[2] est le troisième, etc). Par exemple, anycurve.pos[0] est la position du premier point dans anycurve.

Vous pouvez donner à la courbe une liste explicite de coordonnées sous forme de tuples comme toutes les séquences Python. Voici un exemple d'un carré 2D:

square = curve(pos=[(0,0),(0,1),(1,1),(1,0),(0,0)])

Essentiellement, (1,1) est l'abréviation de (1,1,0). Cependant, vous ne pouvez pas mélanger des points 2D et 3D dans une même liste.

Les courbes peuvent avoir une épaisseur spécifiée par le rayon de la section transverse de la courbe (la courbe a une épaisseur ou un diamètre qui est le double du rayon):

curve(pos=[(0,0,0), (1,0,0), (2,1,0)], radius=0.05)

Le rayon par défaut vaut 0, ce qui dessine une courbe fine. Un rayon non nul donne une "épaisseur" à la courbe, mais une très petite valeur pour le rayon peut donner une courbe qui sera trop fine pour être visible.

Dans l'exemple suivant, la fonction arange() (fournie par le module Numeric Python, qui est importé par le module Visual, donne une séquence de valeurs de 0 à 20 avec un pas de 0.1 (n'incluant pas la dernière valeur 20).

c = curve( x = arange(0,20,0.1) ) # Dessine une hélice

c.y = sin( 2.0*c.x )

c.z = cos( 2.0*c.x )

Les attributs x, y, et z permettent aux courbes d'être utilisées pour dessiner facilement des fonctions:

curve( x=arange(100), y=arange(100)**0.5, color=color.red)

Une fonction de traçage ressemble à ceci (un programme complet!):

eqn = raw_input('Equation in x: ')

x = arange( 0, 10, 0.1 )

curve( x=x, y=eval(eqn) )

Le tracé d'une fonction paramétrique est aussi facile:

t = arange(0, 10, 0.1)

curve( x = sin(t), y = 1.0/(1+t), z = t**0.5,
red = cos(t), green = 0, blue = 0.5*(1-cos(t)) )

Voici les attributs de la courbe:

pos[] Tableau des positions des points dans la courbe: pos[0], pos[1], pos[2]....
Le nombre courant de points est donné par len(curve.pos)

x[ ], y[ ], z[ ] Composantes de pos; chacune vaut par défaut [0,0,0,0,...]

color[ ] Couleur des points dans la courbe

red[ ], green[ ], blue[ ] Composantes de couleur des points dans la courbe

radius Rayon de la section transverse de la courbe
Par défaut, radius=0 rend la courbe mince

 

Ajout de plus de points à une courbe

Les courbes peuvent être créées par incrémentation par la fonction append(). Un nouveau point partage par défaut les caractéristiques du dernier point.

helix = curve( color = color.cyan )

for t in arange(0, 2*pi, 0.1):

    helix.append( pos=(t,sin(t),cos(t)) )

Un des nombreux usages de la courbe est de laisser une traînée derrière un objet en mouvement. Par exemple, si ball est une sphère en mouvement, ceci ajoutera un point à la traînée:

trail = curve()

ball = sphere()

...# Chaque fois que vous mettez à jour la position de la balle:

trail.append(pos=ball.pos)

 

Interpolation

Le mécanisme de tracé de la courbe est l'interpolation d'un point au suivant. Par exemple, supposons que les trois premiers points soient rouges mais que le quatrième point soit bleu, comme dans l'exemple suivant. Les lignes connectant les trois premiers points sont tous rouges, mais la ligne allant du troisième point (rouge) au quatrième point (bleu) est affiché avec un dégradé du rouge au bleu.

c = curve( pos=[(0,0,0), (1,0,0)], color=color.red )

c.append( pos=(1,1,0) ) # ajoute un point rouge

c.append( pos=(0,1,0), color=color.blue) # ajoute un point bleu

Si vous voulez un changement brusque dans la couleur ou l'épaisseur, ajoutez simplement un autre point à la même position. Dans l'exemple suivant, ajouter un point bleu à la même position que le troisième point (rouge) rend la ligne finale d'un bleu pur.

c = curve( pos=[(0,0,0), (1,0,0)], color=color.red )

c.append( pos=(1,1,0) ) # ajoute un point rouge

c.append( pos=(1,1,0), color=color.blue) # même point, bleu

c.append( pos=(0,1,0) ) # ajoute un point bleu

 


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.