geoPyX v2 : version Française

texte alternatif

Introduction

geoPyX est un module écrit en Python pour construire des figures géométriques aisément. Il utilise le package PyX , mais en simplifie beaucoup la syntaxe. Vous pouvez ainsi sauvegarder vos figures sous différents formats : EPS, PDF et PNG pour le Web (Dans ce cas, il est nécessaire d'avoir installé ImageMagick sur votre machine).

Vue d'ensemble:

J'ai commencé geoPyX en Aôut 2006, car j'étais frustré par la gestion dynamique des labels sous MetaPost et de la pauvreté des boucles dans PSTricks. Le package PyX permet un accès simultané aux language Adobe PostScript et LaTeX aux utilistaeurs de Python. geoPyX est encore très jeune et peut encore contenir certains bugs, aussi utilisez-le à vos risques et périls !

La version 2.0 apporte beaucoup de nouveautés, mais n'est pour l'instant pas aussi évoluée que l'était la première.

Au niveau des nouvelles fonctionnalités, il faut noter une syntaxe beaucoup plus souple et cohérente. Ainsi, si précédemment on avait ceci dans le code source (un triangle avec un label et une cote de longueur):

#!/usr/bin/env python
# -*- coding: Latin-1 -*-

from geopyx import *
f = Figure( -2,-2,11,10 )
A = Point(0,0)
B = Point(10,0)
C = Point(10,3.3)
f.trace( Triangle.Pt(A,B,C) )
cotation( f, A, M, -0.5, 0.05, r'$45$' )
Label.Pt( f, A, r'$A$ ', angle='sw' )
f.end( 'test1' )

Deviendra maintenant ceci :

#!/usr/bin/env python
# -*- coding: Latin-1 -*-

from geopyx import *
f = Figure( -2,-2,11,10 )
A = Point(0,0)
B = Point(10,0)
C = Point(10,3.3)
f.add( Triangle.Pt(A,B,C) )
f.add( Cotation( f, A, M, -0.5, 0.05, r'$45$' ) )
f.add( Label.Pt( f, A, r'$A$ ', angle='sw' ))
f.trace()
f.end( 'test1' )

Le nombre de parenthèses augmente donc un petit peu, mais c'est un gain dans la syntaxe qui était visé avant tout.

Sur cette nouvelle version, voici les primitives implémentées données sous leur forme Française, puis Anglaise (qui correspond à l'utilisation réelle), suivi de leur hierarchie:

Quelques facilités ont aussi été incorporées pour :

La prochaine version comportera des classes pour :

Il est enfin prévu de développer :

Dépendances:

Pour faire fonctionner geoPyX, vous aurez besoin de :

Licence:

geoPyX est sous licence GPL.

Exemples:

Ils vont venir au fûr et à mesure de l'avancement du projet, soyez patients.

Nouveautés:

18 Janvier 2007 : La Classe Segment et ses dérivées Line et Ray disposent maintenant de constructions un peu plus "naturelles", par l'intermédiaire de la méthode de classe Pt. C'est à dire qu'on peut dorénavant construire une droite par l'intermédiaire de deux Points ou d'un Point et d'un Vector. Cela aurait dû être fait depuis longtemps, mais c'est seulement aujourd'hui que j'ai constaté ce manque car j'en avais besoin pour produire une figure. Autrement, je commence tout juste un modèle sur la 3d, je manque de références à ce sujet et je vais donc chercher à en savoir davantage.

15 Janvier 2007 : Ajout des boxLabels et améliorations des Labels qui sont maintenant transformables à souhait.

04 Janvier 2007 : J'ai commencé à écrire de nouveau cette page pour l'actualiser, il restait trop de codes sources de l'ancienne syntaxe et les miniatures générées n'avaient pas toutes la même taille, ce qui était esthétiquement gênant.

03 Janvier 2007 : La version geoPyX v2.0 Beta voit le jour : geoPyXv2.

Voici un aperçu de la syntaxe générale d'un exemple, l'image générée correspont à la première parmi les cinq qui suivent:

#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-

from geopyx import *

pyx.unit.set(uscale=1.5) # zoomin by 150%

f = Figure(-8,-8,8,8)

p = Point(6,4)
q = Point(3,-2)
r = Point(1,1)

t1 = Triangle.Pt(p,q,r)
t2 = t1.rotated(0,0,180)

[p1,q1,r1] = t2.coord_list
pto = Point.Middle(p,p1)

f.add(t1, filled='grey9')
f.add(t2, filled='grey6')

for pt in t1.coord_list + t2.coord_list:
    f.add( symbCircle.Pt(pt), filled ='yellow')
    f.add( Segment.Pt(pt, pt.sympt(0,0)), col='red', st='dd')

f.add( codeSegments(pto,p,pto,p1,tn=3), col='red' )
f.add( codeSegments(pto,q,pto,q1,tn=2,angle=-45), col='red' )
f.add( codeSegments(pto,r,pto,r1,tn=1), col='red' )

f.add( Label.Pt(p, r"$P$", angle='n' ) )
f.add( Label.Pt(q, r"$Q$", angle='se' ) )
f.add( Label.Pt(r, r"$R$", angle='w' ) )
f.add( Label.Pt(p1, r"$P'$", angle='s' ) )
f.add( Label.Pt(q1, r"$Q'$", angle='n' ) )
f.add( Label.Pt(r1, r"$R'$", angle='se' ) )
f.add( Label.Pt(pto, r"$O$", angle='n' ) )
f.add( Label(0,-5,r"Central~Symetry"))
f.trace()
f.end('centralsym', png='True')

Et voici les rendus obtenus (j'ai illustré ici différentes transformations, étudiées en collège ou en lycée), tous transformés en PNG pour afficher cette page :


Les transformations affines en actions (qui peuvent être enchaînées):

centralsym_mini axesym_mini rot_mini homotetie_mini translation_mini

Quelques variations sur les triangles, avec un peu de couleur, voire de transparence dans certains cas:

Euler_circle_mini heights_mini bissectors_mini amusements_mini circumcircle_mini

Des travaux sur les parallelogrammes et les translations

parallelogram_mini vectors_1_mini

Quelques fonctions et la nouvelle classe boxedLabel

graph1_mini polar1_mini

Un exemple beaucoup plus complexe : j'ai été forcé ici d'utiliser les possibilités de PyX à l'intérieur du script geoPyX

riemman_mini

Les boxedLabels sont des boites de textes auxquelles on peut appliquer différentes transformations affines.

boxedlabel_mini

Téléchargements:

Dernière version : geoPyXv2 (15 Janvier 2007)

Diagramme de classes:

Il est énorme (2021x1743), en voici un aperçu :

diagramme des classes

Documentation:

La documentation doit encore être écrite. Elle sera disponible en différents formats (LaTeX, OpenOffice, CHM, etc.), conséquence de l'utilisation du package reST.

Limitations:

Je suis tout à fait conscient des limitations que peut apporter geoPyX pour l'instant, néanmoins, c'est un moyen efficace, clair et rapide pour créer des figures géométriques "simples". Pour des schémas plus complexes, il faudra mettre les mains dans le cambouis et utiliser toutes les possibilités de PyX. Mais rassurez-vous, elles sont énormes !

Conseils:

Contacts:

Si vous avez des questions ou suggestions, que vous appercevez un bug, écrivez-moi à kib2[at]free.fr. Quelques fois, des nouvelles sont postées sur mon blog, mais il est actuelement en plein chantier.

Remerciements: