La librairie Vector2D (classe Vector2)

Pour mon premier code publié, voici un objet émulant les vecteurs en 2 dimensions.
Le code est au bout de ce lien.
le repositary complet est au bout de celui-ci.
Je l’ai conçu pour être facile d’usage et flexible au dépend de la performance. On peut, inverser cela en commentant quelques lignes (tout ce qui commence par « @ »).
Cet objet permet du code tel que celui ci:

a = Vector2( 2, 2)
b = Vector2( 3, 3)
c = 2*a - b    # Les opérateurs courants marchent (+, -, *, +=, -=, ==) exceptés le point du produit scalaire et le ^ du produit vectoriel
c += (0,2)    # Le duck typing autorise un tuple comme opérande
x,y = c    # sémantiquement équivalent à "x = c[0]; y=c[1]"
toto == c.x    #les vecteurs ont des propriétés x et y
tata== c[1]    # les vecteurs sont des énumérés.

Utiliser un tuple (ou n’importe quel énuméré), c’est cool, mais le duck typing va plus loin.
Il est possible d’utiliser n’importe quel objet avec les propriétés x et y OU getX() et getY() OU get_x() et get_y() dans la plupart des calculs.
Mon point de départ était la librairie “euclid.py” de Alex Holkner que j’ai élaguée puis améliorée. L’original s’occupe de la géométrie euclidienne de manière bien plus large.

J’ai préféré me limiter à 2 dimensions et aux vecteurs pour fournir un code pas trop fouillis à ceux qui n’ont pas besoin de plus. En particulier pour le jeu vidéo.
Dans ce contexte, j’ai constaté qu’il est plus simple (et performant) d’utiliser un “vrai” vecteur 2D qu’un vecteur 3D (ou n dimensions) dont on ignore une dimension.
Je pense publier une librairie plus complète plus tard.

Je publie ce code dans le domaine public. La règle est simple: vous en faites ce que vous voulez (et je ne suis pas responsable du résultat).
Je vous invite chaleureusement à me faire une donation, à me créditer et à garder le code résultant aussi libre que possible, mais avant tout je ne veux pas vous bloquer avec des contraintes de droit.

Bref! Voici les liens vers:
Le module vector2d.py
La documentation (en anglais, aproximatif, pour l’instant)
La libraire originale “euclid.py”. Plus complète mais moins cool (en python2.x)
Donation à votre bienfaiteur

Bonjour tout le monde!

Bienvenu sur mon blog consacré à la programmation Python… pardon… consacré à MA programmation Python.

Je publierais donc mon code à moi en esperant qu’ils sera utile à d’autre gens. Je pense me limiter à 2 ou 3 post par mois.

Oui: c’est un blog complètement nombriliste ou je parlerais essentiellement tout seul de bouts de code qui, vraisemblablement n’intéresseront que moi.

Mais on ne sais jamais…

Qui suis-je?

Je suis un programmeur; un vieux de la vieille. Comme beaucoup d’individu de ce type, je n’ai pas de boulot, mais je le vis assez bien. Ça me permet, pour une fois, de coder ce qui m’amuse.

Seulement, je me heurte au problème récurant des passionnés procrastinateur: je commence des trucs super-intéressants, mais ne les fini jamais. Genre: Pas grave! C’est juste un truc perso

C’est donc un peu le but de ce blog. Étant donné un nombre suffisant de regards accusateurs, tous mes bouts de codes devrons être terminées.

Le calendrier de mes publications sera aussi tributaire de mon style de vie. Il se trouve que je vis et voyage dans les zones rurales ou maritimes de Sumatra. L’Internet et même l’électricité peuvent s’y faire rares.

Le programme

Je compte publier un truc utilisable tout les 1 ou 2 mois.

Ma production privilégie traditionnellement la facilité d’usage et la lisibilité.

Je publie des « vrai » version betha. C.a.d. que, dans mon esprit, ce sont des produits fini mais qui demande encore l’avis d’un œil externe.

Juin 2016

Vector2D

Un objet représentant un vecteur en 2 dimensions
Je sais, il y en déjà plein, mais le mien est meilleur.
Il permet notamment un bon niveau de duck typing (pour ceux qui ne connaissent pas, disons que c’est du polymorphisme) qui augmente largement la lisibilité.

Usage:

spam = Vector2(4,5)
x,y = spam  # Sémantiquement équivalent a « x=spam[0] ; y=spam[1] »
foo = 2 * spam + (x,y) # Le tuple (x,y) est compris comme un Vector2
# Les 2 lignes suivantes sont equivalentes
print ('foo = Vector2(%.2f, %.2f)' % (foo.x, foo.y))
print ('foo = Vector2(%.2f, %.2f)' % (foo[0], foo[1]))

Sources:
https://bitbucket.org/holypython/vector2d/src

Juillet 2016

zzChrono

Une bibliothéque avec un décorateur permetant de mesurer le temp d’exécution d’une fonction (ou d’une portion, mais sans le sucre syntaxique)

Usage:

@chronometer("render time")
def display():
   do_something()   

@chronometer("geometry time")
def compute_geometry():
   do_plenty_of_things()
 
display()
compute_geometry()
display()

>>> display_chrono("render time")
<Chrono "render time" total:0.03125286102294922 s >
>>> display_all()
<Chrono "render time" total:0.03125286102294922 s >
<Chrono "geometry time" total:0.04687809944152832 s >

Sources (work in progress. N’hésitez pas a proposer votre aide):
https://bitbucket.org/holypython/zzchrono/src

Aout 2016

denominate_numbers

Permet de faire des maths avec des nombres dimentionnés (ayant des unitées). De l‘analyse dimentionelle, si vous aimez les grands mots.

Usage :

>>> g = 9.8*m/s/s
>>> print(g)
9.8 m.s-2
>>> hauteur = 120*cm
>>> print (hauteur)
1.2 m
>>> energie_potentielle = hauteur*g
>>> print(energie_potentielle)
11.76 m2.s-2
>>> absurde = hauteur + g
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in 
    absurde = hauteur + g
TypeError: Can not add units "m" with "m.s-2"

Peut etre :
Afficher 11.76 m2.s-2 c’est exact, mais peut etre 11.76 J est-il mieux. Qu’en pensez-vous?
Sources (work in progress. N’hésitez pas a proposer votre aide):
https://bitbucket.org/holypython/dimentional-analysis/src

Octobre 2016

Géométrie euclydienne, le retour

Je ne sais pas encore ce que je vais faire.
Soit étendre ma librairie Vector2D à toute la géometrie euclidienne du plan, soit généraliser mon vecteur polymorphe a la 3D.
Peut etre meme les deux si j’ai le temps.