SpiraleRectangle little project added
This commit is contained in:
parent
f569de76b0
commit
ee6ef92b40
4 changed files with 178 additions and 0 deletions
20
SpiraleRectangle/README.md
Normal file
20
SpiraleRectangle/README.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
### Juste pour en faire un.
|
||||||
|
|
||||||
|
Ici, j'explique un peu comment faire le fameux fichier *GIF*.
|
||||||
|
|
||||||
|
Le répertoire racine est `projet_spirale_rectangle/`
|
||||||
|
D'abord, on exécute le script *Python* `./main/spirale_rectangle.py`.
|
||||||
|
On obtient alors dans `./data/` des images en format *PNG*. Ces
|
||||||
|
fichiers ont les noms génériques `spirale***.png` où `***` est un
|
||||||
|
numéro de *000* à *999*.
|
||||||
|
On termine alors avec le script *Bash* `./bash/spirale_rectangle.sh`.
|
||||||
|
Des fichiers intermédiaires `spiralebis***.png` sont générés avant
|
||||||
|
de créer dans `./output/` le fichier final `spirale_rectangle.gif`.
|
||||||
|
|
||||||
|
J'ai fait ce tout petit projet pour passer le temps. C'est cadeau,
|
||||||
|
mais c'est moi qui l'ai fait !
|
||||||
|
|
||||||
|
:Organization: Alnotz Corp.
|
||||||
|
:Author: Alnotz
|
||||||
|
:Date: 02/09/2018
|
||||||
|
:Licence: GNU General Public License 3
|
25
SpiraleRectangle/bash/spirale_rectangle.sh
Normal file
25
SpiraleRectangle/bash/spirale_rectangle.sh
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Ce petit fichier permet de créer un fichier image GIF à partir d'un séquençage de fichiers PNG. Suite
|
||||||
|
#+à un script Python du nom de spirale_rectangle.py.
|
||||||
|
# La commande convert de ImageMagick permet de retaper cette suite d'images et leur séquençage.
|
||||||
|
|
||||||
|
# On est dans le répertoire-racine du projet : projet_spirale_rectangle/.
|
||||||
|
echo " " ;
|
||||||
|
echo "Troncage des images." ;
|
||||||
|
echo " " ;
|
||||||
|
for IMAGE_NO in $( seq 0 39 ; ) ; #Sur plusieurs fichiers PNG...
|
||||||
|
do
|
||||||
|
convert -verbose -crop 126x94+327+149 +repage ./data/spirale$( printf "%03d" "$IMAGE_NO" ).png \
|
||||||
|
./data/spiralebis$( printf "%03d" "$IMAGE_NO" ).png #On rogne bien chaque image.
|
||||||
|
done ;
|
||||||
|
for i in $( seq 0 39 ) ;
|
||||||
|
do
|
||||||
|
IMAGE_LISTE[$i]=./data/spiralebis$( printf "%03d" "$i" ).png ; #Liste des nouveaux fichiers PNG.
|
||||||
|
done ;
|
||||||
|
echo " " ;
|
||||||
|
echo "Création du fichier GIF." ;
|
||||||
|
echo " " ;
|
||||||
|
LISTE=${IMAGE_LISTE[@]} ;
|
||||||
|
convert -verbose -dispose previous -delay 10 -loop 0 $LISTE ./output/spirale_rectangle.gif ; #Puis on assemble en un fichier GIF.
|
||||||
|
echo "Terminé." ;
|
20
SpiraleRectangle/main/__init__.py
Normal file
20
SpiraleRectangle/main/__init__.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
### Info générale
|
||||||
|
|
||||||
|
Le programme principal est exécutable comme un module.
|
||||||
|
|
||||||
|
#### Arborescence de `projet_spirale_rectangle`
|
||||||
|
|
||||||
|
./
|
||||||
|
bash/
|
||||||
|
spirale_rectangle.sh
|
||||||
|
data/
|
||||||
|
main/
|
||||||
|
**__init__.py**
|
||||||
|
spirale_rectangle.py
|
||||||
|
output/
|
||||||
|
README.md
|
||||||
|
"""
|
113
SpiraleRectangle/main/spirale_rectangle.py
Normal file
113
SpiraleRectangle/main/spirale_rectangle.py
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
### Spirale rectangulaire
|
||||||
|
|
||||||
|
Ce petit tas de codes permet de simuler une spirale carrée en rotation.
|
||||||
|
Il a été créé pour *Spyder* 3.3.1, sous *Ubuntu* 16.04.5.
|
||||||
|
|
||||||
|
@organization: Alnotz Corp.
|
||||||
|
@author: Alnotz
|
||||||
|
@date: 02/09/2018
|
||||||
|
@version: 0.1
|
||||||
|
@copyright: GNU General Public License 3
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Outils graphiques
|
||||||
|
from matplotlib.pyplot import figure, \
|
||||||
|
plot, \
|
||||||
|
pause, \
|
||||||
|
xlim, \
|
||||||
|
ylim, \
|
||||||
|
show, \
|
||||||
|
close, \
|
||||||
|
savefig
|
||||||
|
# Outils d'analyse numérique.
|
||||||
|
from numpy import array, sqrt, complex
|
||||||
|
|
||||||
|
# Racine du projet.
|
||||||
|
root = "projet_spirale_rectangle/"
|
||||||
|
# Données images en format PNG. Chez moi, de script s'exécute
|
||||||
|
#depuis le répertoire `./main`.
|
||||||
|
data = "../data/"
|
||||||
|
|
||||||
|
a = 1#Coté.
|
||||||
|
|
||||||
|
# Suite complexe à construire. Retourne un vecteur complexe.
|
||||||
|
def suite():
|
||||||
|
"""
|
||||||
|
|
||||||
|
#### Fonction suite
|
||||||
|
|
||||||
|
Renvoie un tableau 1D de la suite complexe *droite*.
|
||||||
|
Ce tableau permettra de trace la première spirale retangle.
|
||||||
|
|
||||||
|
"""
|
||||||
|
z = complex(0,0)# Nombre complexe initial.
|
||||||
|
Z = [z]# Début de suite.
|
||||||
|
for n in range(0, 20):# Calcul récursif des termes suivants.
|
||||||
|
z = z + complex(0, 1)**n * 2**(-n/2 + 1/2) * a
|
||||||
|
Z = Z + [z]
|
||||||
|
return array(Z)
|
||||||
|
|
||||||
|
# Construction des courbes, animation et enregistrement.
|
||||||
|
def graph():
|
||||||
|
"""
|
||||||
|
|
||||||
|
#### Fonction graph
|
||||||
|
|
||||||
|
Fonction principale.
|
||||||
|
Elle cumule trois actions :
|
||||||
|
* Construire les spirales rectangles *obliques*;
|
||||||
|
* Illustrer la séquence d'images;
|
||||||
|
* Enregistrer sous format PNG.
|
||||||
|
|
||||||
|
À la fin, la fenêtre se ferme.
|
||||||
|
|
||||||
|
"""
|
||||||
|
# C'est pour faire un joli texte interactif.
|
||||||
|
from sys import stdout
|
||||||
|
fig = figure("Graphe: aperçu")# Graphe à animer.
|
||||||
|
N = 40# Nombre d'images: 40
|
||||||
|
Z0 = suite()# Spirale rectangle "droite".
|
||||||
|
print("", end="\n")
|
||||||
|
for t in range(1*N + 1):# Animation sur 40 images PNG.
|
||||||
|
fig.clf()# Graphe nettoyé.
|
||||||
|
c1 = t/N
|
||||||
|
c1 = c1 - int(c1)
|
||||||
|
z = complex(0, (1-c1) * 2)
|
||||||
|
Z = [z]# Construction de la prochaine spirale en 20 points.
|
||||||
|
for n in range(0, 20):# Termes complexes de la spirale
|
||||||
|
# "oblique".
|
||||||
|
z = z + c1 * 2**((1-n) / 2) \
|
||||||
|
* complex(0, 1)**n + (1-c1) * 2**((2-n) / 2) \
|
||||||
|
* complex(0, 1)**(n-1)
|
||||||
|
Z += [z]
|
||||||
|
Z = array(Z)# Suite complexe de la spirale "oblique" finie.
|
||||||
|
plot(Z0.real, Z0.imag, "k")# Spirale "droite" tracée.
|
||||||
|
plot(Z.real, Z.imag, "r")# Spirale "oblique" tracée.
|
||||||
|
xlim([0, sqrt(2) * a])# On limite à l'horizontale.
|
||||||
|
ylim([0, a])# On limite à la verticale.
|
||||||
|
stdout.write("\rImage {:03d}/{:03d}".format(t, N))
|
||||||
|
show()# Affichage .
|
||||||
|
file = data + "spirale{:03d}.png".format(t)# Les fichiers
|
||||||
|
#image ont des noms génériques du numéro 000 à 999.
|
||||||
|
try:# On vérifie si le fichier existe déjà.
|
||||||
|
o = open(file, mode='x')#Pas encore? On crée.
|
||||||
|
o.close()
|
||||||
|
except FileExistsError:# Erreur: ce fichier existe.
|
||||||
|
o = open(file, mode='w')#On l'a déjà ? On écrase.
|
||||||
|
o.close()
|
||||||
|
savefig(fname=file, \
|
||||||
|
format='png', \
|
||||||
|
transparent=True, \
|
||||||
|
frameon=False )# On enrengistre le fichier PNG
|
||||||
|
#avec un arrière-plan transparent.
|
||||||
|
pause(0.005)# Temps d'arrêt entre les images.
|
||||||
|
stdout.write("\n")
|
||||||
|
close(fig)# Fermer la fenêtre du graphe.
|
||||||
|
print("Terminé.")
|
||||||
|
graph()# On lance tout ça !
|
Loading…
Reference in a new issue