first gif89a with fortran & plplot

This commit is contained in:
tTh 2023-03-21 15:03:09 +01:00
parent 0db76fef58
commit 28c260ea5e
5 changed files with 88 additions and 33 deletions

View File

@ -13,6 +13,13 @@ de bonnes choses, la septième va vous tenir compagnie.
% ========================================
%
% un petit historique ?
%
\section{On the big irons}
TODO\index{XXX}
\section{FORTRAN77}
Dernière version à exiger le format '80 colonnes' des cartes perforées,
@ -235,7 +242,7 @@ 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}.
Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives.
Nous allons donc commencer par PlPlot, pour envisager ensuite les alternatives.
% --------------------------------------------------------
%
@ -276,10 +283,7 @@ 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}.
l'appel à \texttt{plinit},
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"),
@ -314,17 +318,26 @@ immédiatement garnir de données pertinentes~:
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~:
ce chemin, et enfin de s'arreter de dessiner~:
\begin{verbatim}
call plcol0 (12)
call plline (x, y)
call plend ()
\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.
Dans ce mode de fonctionnement interactif,
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}.
Nous verrons pas la suite comment écrire des fichiers 'image'
vectoriels ou bitmap en mode \textsl{batch}.
Enfin une ouverture vers les Gifs animées\index{gif89a}.
% --------------------------------------------------------
\section{Questions en attente}

View File

@ -3,4 +3,6 @@ plplotting
dessiner
*.png
*.gif
WS/*.png
WS/*.eps

View File

@ -6,3 +6,9 @@ plplotting: plplotting.f90 Makefile
dessiner: dessiner.f90 Makefile
gfortran -g $< $(INCS) -lplplotfortran -o $@
foo.gif: dessiner Makefile
rm -f WS/A????.png
./dessiner
convert -delay 10 -colors 31 WS/A????.png foo.gif

View File

@ -0,0 +1,3 @@
# Workspace
This directory must exist if you want to run exemples.

View File

@ -3,35 +3,17 @@ program dessiner
implicit none
integer :: i
real :: a, b, c, d
character(len=80) :: version
call plgver(version)
write (*,'(a,a)') 'plplot version: ', trim(version)
write (*,'(a,a)') 'plPlot version: ', trim(version)
call plsdev('xwin')
call plinit ()
call plenv(-2.2, 2.2, -2.2, 2.2, 0, 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 dessin_X11 (0.00, 1.51, 11)
call dessin_dans_un_fichier ()
contains ! -----------------------------
!------------------------------------------------------
subroutine dessin_1 (sha, shb, color)
subroutine dessin_X11 (sha, shb, color)
real, intent(in) :: sha, shb
integer, intent(in) :: color
@ -40,8 +22,13 @@ subroutine dessin_1 (sha, shb, color)
real :: k, amp
integer :: i
! print *, 'dessin 1'
amp = 2.0
print *, 'dessin X11:', sha, shb, color
call plsdev('xwin')
call plinit ()
call plenv (-2.1, 2.1, -2.1, 2.1, 1, 2)
amp = 2.16
do i = 1, lg
k = real(i)/real(lg) * 6.2832 * 4.0
x(i) = amp * sin((k+sha)*5)
@ -54,11 +41,55 @@ subroutine dessin_1 (sha, shb, color)
call plcol0 (color)
call plline (x, y)
call plend
end subroutine
!------------------------------------------------------
subroutine dessin_2 ()
!- _ __ ___ ___ ___
!- __ _ (_) / _| ( _ ) / _ \ __ _ |__ \
!- / _` | | | | |_ / _ \ | (_) | / _` | / /
!- | (_| | | | | _| | (_) | \__, | | (_| | |_|
!- \__, | |_| |_| \___/ /_/ \__,_| (_)
!- |___/
subroutine dessin_dans_un_fichier ()
integer, parameter :: nbpts = 40
real :: x(nbpts), y(nbpts)
integer :: frame, i
character(len=89) :: filename
character(len=89) :: buffer
character(len=3) :: str
print *, 'Dessin dans un fichier'
do i=1, nbpts
x(i) = 8.50 * (rand() - 0.5000)
y(i) = 8.50 * (rand() - 0.5000)
enddo
do frame= 0, 149
write (filename, "(a, i4.4, a)") "WS/A", frame, ".png"
print *, frame, ' => ', trim(filename)
call plsdev ('pngcairo')
call plsfnam (trim(filename))
call plinit ()
call plenv (-10., 10., -10., 10., 0, 1)
call plcol0 (3)
do i=1, nbpts
x(i) = x(i) + (rand() - 0.5000)
y(i) = y(i) + (rand() - 0.5000)
call plline (x, y)
enddo
write(buffer, "(i3.3)") frame
str = trim(buffer)
call plcol0 (15)
call plstring (x, y, buffer)
call plend
enddo
print *, 'dessin 2'
end subroutine
!------------------------------------------------------