File: demo_graphics2.pro

package info (click to toggle)
gnudatalanguage 1.1.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 80,368 kB
  • sloc: cpp: 189,797; ansic: 46,721; sh: 677; python: 474; makefile: 146; xml: 69; f90: 28
file content (153 lines) | stat: -rw-r--r-- 4,916 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
function Himmelblau, x1,x2
; Himmelblau f=(x1^2+x2-11)^2+(x1+x2^2-7)^2
  u = x1*x1+x2-11
  v = x1+x2*x2-7
  f = u*u+v*v
RETURN,f 
end
function Rosenbrock, a1, a2
; Rosenbrock: f  = (1 - x1)^2+ 100*(x2 - x1^2)^2 
  x1=double(a1)
  x2=double(a2)
  u1 = 1 - x1
  v1 = x2 - x1*x1
  f = u1*u1 + 100.0*v1*v1
RETURN, f
end

pro sub_demo_graphics2,panel
on_error, 2
if (n_elements(panel) eq 0) then begin
 all=1 
 panel=0
endif else all=(panel gt 4 or panel lt 1)

!P.SUBTITLE=''
!P.TITLE='Contour Demo' 
!X.TITLE="X"
!Y.TITLE="Y"
;
device,get_decomposed=decomp
if (decomp) then AdaptiveColorList=['00FFFF'x,'FFFF00'x,'FF00FF'x] else AdaptiveColorList=[64,92,110,156,208,233,250]
over=1
cont=1
fill=1
m = 256L
n = m
range = 5L
; 1D x y
generatorx=(([findgen(m)]/float(m))*2.0-1.0)*range
generatory=(([findgen(n)]/float(n))*2.0-1.0)*range
a=fltarr(m*n,/nozero)
for i=0L,(m*n)-1 do begin &$
 j=i mod m & k=i/m & a[i]=Himmelblau(generatorx[j],generatory[k]) &$
end
a=reform(a,m,n,/over)
a=max(a)-a
;!nan a corner
a[m-10:m-1,n-10:n-1]=!VALUES.F_NAN
; zero generator
if (all) then !P.MULTI=[0,2,2]

if (panel eq 1 or all ) then begin 
   !P.TITLE="No X,Y"
   if (fill) then contour,a,nlev=24,/FILL,/ISO,/XSTYLE,/YSTYLE, _EXTRA=ex
   if (cont) then contour,a,nlev=24,over=over,/ISO,/FOLLOW,/XSTYLE,/YSTYLE, _EXTRA=ex
endif

   x=exp((generatorx)/(2*range)) &x=x+MIN(x)+1
   y=(range+generatory)^2 & y=y+MIN(Y)+1

if (panel eq 2 or all ) then begin 
   !P.TITLE="With 1DX, 1DY"
   if (fill) then contour,a,x,y,nlev=24,/XSTYLE,/YSTYLE,/FILL,_EXTRA=ex
   if (cont) then contour,a,x,y,nlev=24,/XSTYLE,/YSTYLE,over=over,/FOLLOW, _EXTRA=ex
endif

   generatorx=([findgen(m*n) mod m]/float(m))*2*!PI
   generatorx=reform(generatorx,m,n,/over)
   generatory=(floor([findgen(m*n)]/float(m))/float(n))*2*!PI
   generatory=reform(generatory,m,n,/over)
   angle=45*!PI/180.0
   x=generatorx*cos(angle)-generatory*sin(angle) & x=x+10
   y=generatorx*sin(angle)+generatory*cos(angle) & y=y+10

if (panel eq 3 or all ) then begin 
   !P.TITLE="With 2DX, 2DY (45 degrees rotation)"
   if (fill) then contour,a,x,y,nlev=24,/FILL,/ISO,/XSTYLE,/YSTYLE, _EXTRA=ex
   if (cont) then contour,a,x,y,nlev=24,OVER=over,/ISO,/XSTYLE,/YSTYLE, _EXTRA=ex
endif

if (panel eq 4 or all ) then begin 
   
   !P.TITLE="With patterns"
   if (fill) then contour,a,nlev=24,C_COLORS=AdaptiveColorlist,C_ORIENTATION=([indgen(24)]*120/24),C_SPACING=[0.1,0.2,0.3],C_LINESTYLE=[0,1,2,3],C_THICK=[0,3,5],/FILL,/ISO,/XSTYLE,/YSTYLE, _EXTRA=ex
   if (cont) then contour,a,x,y,nlev=6,OVER=over,/follow,/ISO, _EXTRA=ex
endif
!P.MULTI=0
end

PRO demo_graphics2,print=print,mode=mode,help=help,panel=panel
if keyword_set(help) then begin
 print,"Usage: demo_graphics2,[mode=[0,1,2]],[/print],panel=panel"
 print,"mode=0 produces decomposed=0 output"
 print,"mode=1 produces decomposed=1 output"
 print,"mode=2 or KW mode absent: produces both outputs"
 print,"panel=[0,1,2,3,4] plots only panel 1 (or 2,or 3..) or all 4 panels if  0 or absent"
 print,"/print produces additionally various Postscript and SVG outputs."
 return
endif
if ~size(mode,/type)  then mode=2

for decomposed=0,1 do begin
   if decomposed eq mode or mode eq 2 then begin
      device,decomposed=decomposed
      sub_demo_graphics2,panel
      xyouts,0,0,decomposed,/norm
      if mode eq 2 then wait,1
   endif
endfor
if (not keyword_set(print)) then return
prompt=strmid(!PROMPT,0,1)
tvlct,r,g,b,/get ; save colors
set_plot,'ps' ; change device
for decomposed=0,1 do begin
   if decomposed eq mode or mode eq 2 then begin
      device,decomposed=decomposed
      sdec=string(decomposed,format='(I1.1)')
      filenamebwport='demo_graphics2_bw_port_'+prompt+'-'+sdec+'.ps'
      filenamebwland='demo_graphics2_bw_land_'+prompt+'-'+sdec+'.ps'
      filenamecolor='demo_graphics2_color_'+prompt+'-'+sdec+'.ps'
      tvlct,r,g,b               ; restore colortable
      device,filename=filenamebwport,/port,color=0
      sub_demo_graphics2,panel
      print,'printing test file as black&white postscript portrait '+filenamebwport
      device,/close
      device,filename=filenamebwland,/land,color=0
      sub_demo_graphics2,panel
      print,'printing test file as black&white postscript landscape '+filenamebwland
      device,/close
      device,filename=filenamecolor,/port,color=1
      sub_demo_graphics2,panel
      print,'printing test file as color postscript portrait '+filenamecolor
      device,/close
   endif
endfor
set_plot,'svg' ; change device
for decomposed=0,1 do begin
   if decomposed eq mode or mode eq 2 then begin
      device,decomposed=decomposed
      sdec=string(decomposed,format='(I1.1)')
      filename='demo_graphics2_'+prompt+'-'+sdec+'.svg'
      tvlct,r,g,b               ; restore colortable
      device,filename=filename
      sub_demo_graphics2,panel
      print,'printing test file as svg: '+filename
      device,/close
   endif
endfor
!P.MULTI=0
set_plot,'x'

end