home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / grafx.zip / VIEW9.FOR < prev    next >
Text File  |  1989-03-14  |  4KB  |  194 lines

  1. c    program main
  2. c    call gset                            !  enter graphic mode
  3. c    call view9
  4. c    call aset                            !  return to alpha mode
  5. c    end    
  6. c    -----------------------------------------------------------------------
  7.     subroutine view9
  8. c
  9. c    ...nine viewports demo; use of mid level routines
  10. c
  11. c    (C) Copyright 1988, 1989 by Jim Farrell      All Rights Reserved.
  12. c
  13.     integer gx1(9),gx2(9),gy1(9),gy2(9)
  14.     integer x1,y1,x2,y2,xs,ys
  15. c
  16.     parameter(api=3.141592,a2pi=api*2,apio2=api/2)
  17.     parameter (xpmax=1.0,xpmin=-1.0,ypmax=1.0,ypmin=-1.0)
  18.     parameter (xdmax=639,xdmin=0,ydmax=199,ydmin=0)    !  display limits
  19.     parameter (nx=3,ny=3,xs=5,ys=2)        !  no. and spacing in x & y
  20. c
  21.     call putstr(10,20,' DEMONSTRATION MULTIPLE VIEWS')
  22.     call putstr(12,20,'    AND MID LEVEL ROUTINES ')
  23.     call pause('WHEN READY ')            !  display message and pause
  24.     call gcls
  25.     irk=1                            !  seed for random numbers
  26.     call window(xpmin,ypmin,xpmax,ypmax)    !  set window
  27.     xl=int((xdmax-xdmin-(nx+1)*xs)/nx)        !  viewport size
  28.     yl=int(((ydmax-ydmin-(ny+1)*ys)-10)/ny)
  29.     ig=0
  30.     x2=0
  31.     do 320 i=1,nx                        !  set up the nine viewports
  32.         x1=x2+xs
  33.         x2=x1+xl
  34.         y2=10
  35.         do 310 j=1,ny
  36.             y1=y2+ys
  37.             y2=y1+yl
  38.             ig=ig+1
  39.             gx1(ig)=x1
  40.             gx2(ig)=x2
  41.             gy1(ig)=y1
  42.             gy2(ig)=y2
  43.             call view(x1,y1,x2,y2)        !  set viewport
  44.             call grid9(xpmin,ypmin,xpmax,ypmax)
  45. 310        continue
  46. 320    continue
  47.     dxp=xpmax-xpmin
  48.     dyp=ypmax-ypmin
  49.     ro=min(dxp,dyp)/2
  50. c
  51. c    ...view port 1 - random clusters of points
  52. c
  53.     ig=1
  54.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  55.     do 340 i=1,10
  56.         r=rand(irk)*ro
  57.         x=((dxp-2.0*r)*(rand(irk)-0.5))
  58.         y=((dyp-2.0*r)*(rand(irk)-0.5))
  59.         do 330 j=1,50
  60.             xp=x+r*(rand(irk)-0.5)
  61.             yp=y+r*(rand(irk)-0.5)
  62.             call point(xp,yp)
  63. 330        continue
  64. 340    continue
  65. c
  66. c    ...viewport 2 - drunkards walk
  67. c
  68.     ig=2
  69.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  70.     r=ro
  71.     xp=0.0
  72.     yp=0.0
  73.     do 360 i=1,50
  74. 350        continue
  75.         x=xp+r*(rand(irk)-0.5)
  76.         y=yp+r*(rand(irk)-0.5)
  77.         if(x.lt.xpmin.or.x.gt.xpmax.or.
  78.      1            y.lt.ypmin.or.y.gt.ypmax)goto 350    ! hit the wall?
  79.         call line(x,y,xp,yp)
  80.         xp=x
  81.         yp=y
  82. 360    continue
  83. c
  84. c    ...viewport 3 - boxes
  85. c
  86.     ig=3
  87.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  88.     do 380 i=1,15
  89.         x=dxp*(rand(irk)-0.5)
  90.         y=dyp*(rand(irk)-0.5)
  91.         xp=x*rand(irk)
  92.         yp=y*rand(irk)
  93.         call box(x,y,xp,yp)
  94. 380    continue
  95. c
  96. c    ...viewport 4 - concentric circles
  97. c
  98.     ig=4
  99.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  100.     r=ro
  101.     dr=r/10.0
  102.     do 400 i=1,8
  103.         call circle(0.0,0.0,r)
  104.         r=r-r/8
  105. 400    continue
  106. c
  107. c    ...viewport 5 - random circles
  108. c
  109.     ig=5
  110.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  111.     do 420 i=1,10
  112.         r=rand(irk)*ro
  113.         x=((dxp-2.0*r)*(rand(irk)-0.5))
  114.         y=((dyp-2.0*r)*(rand(irk)-0.5))
  115.         call circle(x,y,r)
  116. 420        continue
  117. c
  118. c    ...viewport 6 - random points 
  119. c
  120.     ig=6
  121.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  122.     do 440 i=1,250
  123.         x=(dxp*(rand(irk)-0.5))
  124.         y=(dyp*(rand(irk)-0.5))
  125.         call point(x,y)
  126. 440    continue
  127. c
  128. c    ...viewport 7 - rotated ellipses
  129. c
  130.     ig=7
  131.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  132.     a=ro
  133.     b=a/6
  134.     dth=api/8
  135.     do 460 i=1,8
  136.         theta=dth*real(i-1)
  137.         call ellipse(0.0,0.0,a,b,theta)
  138. 460    continue
  139. c
  140. c    ...viewport 8 - rotated lines
  141. c
  142.     ig=8
  143.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  144.     r=ro
  145.     da=api/real(8)
  146.     do 480 i=1,8
  147.         a=da*real(i-1)
  148.         xp=r*sin(a)
  149.         yp=r*cos(a)
  150.         call line(-xp,-yp,xp,yp)
  151. 480    continue
  152. c
  153. c    ...viewport 9 - spiral
  154. c
  155.     ig=9    
  156.     call view(gx1(ig),gy1(ig),gx2(ig),gy2(ig))    !  set viewport
  157.     r=ro
  158.     dr=r/(48*8)
  159.     xp=r
  160.     yp=0.0
  161.     da=a2pi/real(48)
  162.     do 500 i=1,48*8
  163.         a=da*real(i-1)
  164.         x=r*cos(a)
  165.         y=r*sin(a)
  166.         call line(xp,yp,x,y)
  167.         xp=x
  168.         yp=y
  169.         r=r-dr
  170. 500    continue
  171.     call pause('REVIEW NINE PLOTS IN NINE VIEWS') !  done - wait for input 
  172.     return
  173.     end
  174. c    ------------------------------------------------------------------
  175.     subroutine grid9(x1,y1,x2,y2)
  176. c
  177. c    ...draw a grid in current viewport
  178. c
  179.     parameter (nx=3,ny=3)
  180. c
  181.     call box(x1,y1,x2,y2)        !  draw border
  182.     dx=(x2-x1)/nx
  183.     dy=(y2-y1)/ny
  184.     do 210 i=1,nx                !  vertical grid lines
  185.         x=x1+dx*real(i-1)
  186.         call line(x,y1,x,y2)
  187. 210    continue
  188.     do 220 i=1,ny                !  horizontal grid lines
  189.         y=y1+dy*real(i-1)
  190.         call line(x1,y,x2,y)
  191. 220    continue
  192.     return
  193.     end
  194.