From 0db76fef58457a156ac777585d1b12c934587e5e Mon Sep 17 00:00:00 2001 From: tTh Date: Tue, 21 Mar 2023 00:16:54 +0100 Subject: [PATCH] assez pour ce soir --- chap/Basic.tex | 1 + chap/Fortran.tex | 66 +++++++++++++++++++++++++++---------- chap/graphisme.tex | 7 +++- chap/video.tex | 6 ++++ code/fortran/dessiner.f90 | 47 +++++++++++++++++++------- code/fortran/plplotting.f90 | 13 ++++++-- 6 files changed, 108 insertions(+), 32 deletions(-) diff --git a/chap/Basic.tex b/chap/Basic.tex index 0b49b4c..4d8826e 100644 --- a/chap/Basic.tex +++ b/chap/Basic.tex @@ -19,6 +19,7 @@ Dans un premier temps, je vais les lister sommairement, et ensuite j'aurais une idée sur lesquels seront les plus funs à explorer. +Dartmouth Time Sharing System % ------------------------------------------- \section{Bywater} \index{bywater} diff --git a/chap/Fortran.tex b/chap/Fortran.tex index 2a5d549..6c4aebd 100644 --- a/chap/Fortran.tex +++ b/chap/Fortran.tex @@ -7,6 +7,10 @@ guerre mondiale, en 1954, par John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM}, \end{quote} +Pourquoi j'ai redécouvert un langage de ma jeunesse, et pourquoi +vous devriez vous aussi y jeter un regard attentif. Il y a plein +de bonnes choses, la septième va vous tenir compagnie. + % ======================================== \section{FORTRAN77} @@ -56,7 +60,8 @@ $ % \section{Args \& Env} -Un fort beau programme, mais il est un peu fermé au monde extérieur. +Un fort beau programme que ce \textsc{helloworld}, mais il est un peu +fermé au monde extérieur. Quand on lance un programme, il peut recevoir des instructions par (mais pas que) deux canaux : les arguments de la ligne de commande et les variables d'environnement. @@ -144,10 +149,15 @@ Il semble qu'il y ait deux concepts orthogonaux : XXX\index{XXX} +Pour faire simple, on accède à chaque unité de donnée l'une après l'autre, +comme quand on déroule une bande 6250bpi. + \subsection{Indexé} \index{index} XXX\index{XXX} +C'est pas pareil. + % -------------------------------------------------------- \section{Modules} @@ -221,7 +231,7 @@ mais ce ne sont probablement pas les seules. La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer, mais il existe bien d'autres options. -Par exemple \textbf{g2} (page \pageref{g2}) semble être utilisable +Par exemple \textbf{g2} (vue en page \pageref{g2}) semble être utilisable avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste un peu de \textsc{rtfm}. @@ -248,18 +258,30 @@ choisir le type de sortie. Dans la version que j'ai (XXX\index{XXX}), on a le choix entre X-Window, PostScript mono ou couleur, Xfig, PNG, SVG, et bien d'autres dont certains, pour moi, assez ésotériques. -D'autre part, avec cette méthode, il est impossible de +D'autre part, avec cette méthode, il semble impossible de préciser la taille de l'image. +Mais la démonstration est faite. -Laissons cette question en suspens, et commençons à dessiner. +Il faut quand même regarder de plus près la subroutine +\texttt{plenv()} (\textsl{Set up standard window and draw box}) +qui initialise simplement un contexte graphique 2D somme toute +assez classique. Elle prend six paramètres. Les quatre premiers +sont les coordonnées flottantes de deux coins du papier, +le cinquième controle l'échelle des axes, et le dernier +controle le tracé des boites autour du graphique. -Première étape, démarrer automatiquement dans une fenètre X11, -en gardant tous les autres paramètres à leur valeur par défaut. -Il suffit de rajouter \texttt{call plsdev('xwin')} juste avant -l'appel à \texttt{plinit}, et d'utiliser la touche \textsl{} -pour sortir. +Nous avons les bases, commençons donc à dessiner. -Ensuite nous allons choisir une couleur pour l'encre (qui est d'un +Premièrement, nous allons chosir de démarrer automatiquement +dans une fenètre X11, +en gardant le reste de la configuration avec ses valeurs par défaut. +Pour cela, il suffit de rajouter \texttt{call plsdev('xwin')} juste avant +l'appel à \texttt{plinit}, il vous faudra utiliser la touche +\textsl{} pour sortir\footnote{Une de mes prochaines tâche sera +de regarder comment quitter avec le '\textbf{q}' canonique}. + +Ensuite, pour mettre en évidence notre art, +nous allons choisir une couleur pour l'encre (qui est d'un rouge du meilleur effet par défaut en mode "xwin"), puis écrire quelques légendes canoniques, donc inutiles, . @@ -273,27 +295,35 @@ sur notre feuille blanche numérique\footnote{Actuellement noire, mais nous trouverons bien comment changer ça}. La forme de ce tracé sera donnée par une suite de coordonnées flottantes \textsl{x/y} -stockées dans deux tableaux parallèles~: +stockées dans deux tableaux parallèles que nous allons +immédiatement garnir de données pertinentes~: \begin{verbatim} integer, parameter :: lg = 500 real :: x(lg), y(lg) -\end{verbatim} - -Tableaux que nous allons immédiatement garnir de données pertinentes~: - -\begin{verbatim} real :: k integer :: i k = 0.1 do i = 1, lg x(i) = k * sin(real(i)/3.0) - y(i) = k * cos(real(i)/3.0) + y(i) = k * cos(real(i)/5.0) k = k * 1.006021 enddo \end{verbatim} -Wesh gro ! +Une fois en possession de ces données conceptuelles, que l'on peut +aisément voire comme un cheminement, nous allons demander +au crayon de se promener sur notre feuille virtuelle en suivant +ce chemin~: + +\begin{verbatim} + call plcol0 (12) + call plline (x, y) +\end{verbatim} + +Au passage, vous pouvez remarquer la magie du Fortran moderne~: +il n'est plus nécessaire de signifier la dimension des tableaux +lors de l'appel de la procédure. % -------------------------------------------------------- diff --git a/chap/graphisme.tex b/chap/graphisme.tex index 1c7a9f1..f889862 100644 --- a/chap/graphisme.tex +++ b/chap/graphisme.tex @@ -170,7 +170,6 @@ nous aurons toujours la même séquence en sortie. \subsection{Trucs à voir} \begin{verbatim} - #declare VIRGINIA = transform { matrix < 1, 1, 0, @@ -184,6 +183,12 @@ transform {VIRGINIA} } \end{verbatim} +% ================================================ + +\section{Avec Fortran} + +plplot + % ------------------------------------------------ diff --git a/chap/video.tex b/chap/video.tex index 2a9f98f..3614167 100644 --- a/chap/video.tex +++ b/chap/video.tex @@ -107,6 +107,12 @@ préciser le coef de qualité ( qscale : 1 = le mieux / 3 = correcte ) https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a} +\begin{verbatim} +ffmpeg -ss 0:5:59.600 -to 0:6:11.150 -i Downloads/foo.mp4 tmp/tragic.gif +\end{verbatim} + +% ----------------------------------------------------------------- + \subsection{Encoder un cloître} Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo diff --git a/code/fortran/dessiner.f90 b/code/fortran/dessiner.f90 index 17262c1..b360f4d 100644 --- a/code/fortran/dessiner.f90 +++ b/code/fortran/dessiner.f90 @@ -2,6 +2,9 @@ program dessiner use plplot implicit none + integer :: i + real :: a, b, c, d + character(len=80) :: version call plgver(version) write (*,'(a,a)') 'plplot version: ', trim(version) @@ -11,31 +14,53 @@ program dessiner call plenv(-2.2, 2.2, -2.2, 2.2, 0, 1) - call dessin_1 () + a = 0 + b = 0 + c = 0 + d = 0 + do i=1, 100 + a = a + 0.01 + b = b + 0.02 + call dessin_1 (a, b, 12) + c = c + 0.03 + d = d + 0.04 + call dessin_1 (c, d, 13) + enddo call plend -contains ! ----------------------------- -subroutine dessin_1 () +contains ! ----------------------------- +!------------------------------------------------------ +subroutine dessin_1 (sha, shb, color) + real, intent(in) :: sha, shb + integer, intent(in) :: color - integer, parameter :: lg = 500 + integer, parameter :: lg = 2000 real :: x(lg), y(lg) - real :: k + real :: k, amp integer :: i - k = 0.1 + ! print *, 'dessin 1' + amp = 2.0 do i = 1, lg - x(i) = k * sin(real(i)/3.0) - y(i) = k * cos(real(i)/3.0) - k = k * 1.0060 + k = real(i)/real(lg) * 6.2832 * 4.0 + x(i) = amp * sin((k+sha)*5) + y(i) = amp * cos((k+shb)*3) enddo - print *, i, k, x(i), y(i) + ! print *, k, x(i), y(i) call plcol0 (15) ! pure white call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots from tTh") - call plcol0 (12) + call plcol0 (color) call plline (x, y) end subroutine +!------------------------------------------------------ +subroutine dessin_2 () + + print *, 'dessin 2' + +end subroutine +!------------------------------------------------------ end program diff --git a/code/fortran/plplotting.f90 b/code/fortran/plplotting.f90 index 10ecb5c..a9b15b6 100644 --- a/code/fortran/plplotting.f90 +++ b/code/fortran/plplotting.f90 @@ -2,7 +2,16 @@ program plplotting use plplot implicit none + ! Initializing the plotting package with a lot of + ! default (and pertinent) values. call plinit () - call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0) - call plend + + ! Sets up plotter environment for simple graphs + call plenv (-2.1, 2.1, -2.1, 2.1, 0, 0) + + ! Ends a plotting session, tidies up all the output + ! files,switches interactive devices back into text + ! mode and frees up any memory that was allocated. + call plend () + end program