first gif89a with fortran & plplot
This commit is contained in:
		
							parent
							
								
									0db76fef58
								
							
						
					
					
						commit
						28c260ea5e
					
				@ -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}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								code/fortran/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								code/fortran/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -3,4 +3,6 @@ plplotting
 | 
			
		||||
dessiner
 | 
			
		||||
 | 
			
		||||
*.png
 | 
			
		||||
 | 
			
		||||
*.gif
 | 
			
		||||
WS/*.png
 | 
			
		||||
WS/*.eps
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
							
								
								
									
										3
									
								
								code/fortran/WS/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								code/fortran/WS/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
# Workspace
 | 
			
		||||
 | 
			
		||||
This directory must exist if you want to run exemples.
 | 
			
		||||
@ -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
 | 
			
		||||
!------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user