assez pour ce soir

This commit is contained in:
tTh 2023-03-21 00:16:54 +01:00
parent aa4f0664cb
commit 0db76fef58
6 changed files with 108 additions and 32 deletions

View File

@ -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 ensuite j'aurais une idée sur lesquels seront les plus funs
à explorer. à explorer.
Dartmouth Time Sharing System
% ------------------------------------------- % -------------------------------------------
\section{Bywater} \index{bywater} \section{Bywater} \index{bywater}

View File

@ -7,6 +7,10 @@ guerre mondiale, en 1954, par
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM}, John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},
\end{quote} \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} \section{FORTRAN77}
@ -56,7 +60,8 @@ $
% %
\section{Args \& Env} \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 Quand on lance un programme, il peut recevoir des instructions
par (mais pas que) deux canaux : les arguments de la ligne de commande par (mais pas que) deux canaux : les arguments de la ligne de commande
et les variables d'environnement. et les variables d'environnement.
@ -144,10 +149,15 @@ Il semble qu'il y ait deux concepts orthogonaux :
XXX\index{XXX} 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} \subsection{Indexé} \index{index}
XXX\index{XXX} XXX\index{XXX}
C'est pas pareil.
% -------------------------------------------------------- % --------------------------------------------------------
\section{Modules} \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, La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer,
mais il existe bien d'autres options. 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 avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste
un peu de \textsc{rtfm}. 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 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 X-Window, PostScript mono ou couleur, Xfig, PNG, SVG, et bien
d'autres dont certains, pour moi, assez ésotériques. 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. 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, Nous avons les bases, commençons donc à dessiner.
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{<enter>}
pour sortir.
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{<enter>} 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"), rouge du meilleur effet par défaut en mode "xwin"),
puis écrire quelques légendes canoniques, donc inutiles, . 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}. nous trouverons bien comment changer ça}.
La forme de ce tracé sera donnée par une suite de coordonnées La forme de ce tracé sera donnée par une suite de coordonnées
flottantes \textsl{x/y} 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} \begin{verbatim}
integer, parameter :: lg = 500 integer, parameter :: lg = 500
real :: x(lg), y(lg) real :: x(lg), y(lg)
\end{verbatim}
Tableaux que nous allons immédiatement garnir de données pertinentes~:
\begin{verbatim}
real :: k real :: k
integer :: i integer :: i
k = 0.1 k = 0.1
do i = 1, lg do i = 1, lg
x(i) = k * sin(real(i)/3.0) 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 k = k * 1.006021
enddo enddo
\end{verbatim} \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.
% -------------------------------------------------------- % --------------------------------------------------------

View File

@ -170,7 +170,6 @@ nous aurons toujours la même séquence en sortie.
\subsection{Trucs à voir} \subsection{Trucs à voir}
\begin{verbatim} \begin{verbatim}
#declare VIRGINIA = #declare VIRGINIA =
transform { transform {
matrix < 1, 1, 0, matrix < 1, 1, 0,
@ -184,6 +183,12 @@ transform {VIRGINIA}
} }
\end{verbatim} \end{verbatim}
% ================================================
\section{Avec Fortran}
plplot
% ------------------------------------------------ % ------------------------------------------------

View File

@ -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} 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} \subsection{Encoder un cloître}
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo

View File

@ -2,6 +2,9 @@ program dessiner
use plplot use plplot
implicit none implicit none
integer :: i
real :: a, b, c, d
character(len=80) :: version character(len=80) :: version
call plgver(version) call plgver(version)
write (*,'(a,a)') 'plplot version: ', trim(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 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 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 :: x(lg), y(lg)
real :: k real :: k, amp
integer :: i integer :: i
k = 0.1 ! print *, 'dessin 1'
amp = 2.0
do i = 1, lg do i = 1, lg
x(i) = k * sin(real(i)/3.0) k = real(i)/real(lg) * 6.2832 * 4.0
y(i) = k * cos(real(i)/3.0) x(i) = amp * sin((k+sha)*5)
k = k * 1.0060 y(i) = amp * cos((k+shb)*3)
enddo enddo
print *, i, k, x(i), y(i) ! print *, k, x(i), y(i)
call plcol0 (15) ! pure white call plcol0 (15) ! pure white
call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots from tTh") call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots from tTh")
call plcol0 (12) call plcol0 (color)
call plline (x, y) call plline (x, y)
end subroutine end subroutine
!------------------------------------------------------
subroutine dessin_2 ()
print *, 'dessin 2'
end subroutine
!------------------------------------------------------
end program end program

View File

@ -2,7 +2,16 @@ program plplotting
use plplot use plplot
implicit none implicit none
! Initializing the plotting package with a lot of
! default (and pertinent) values.
call plinit () 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 end program