Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

ngon.f

Go to the documentation of this file.
00001 
00002 c
00003 c       Copyright (c) 1986,1987,1988,1989,1990,1991,1992,1993,
00004 c       by Steve McMillan, Drexel University, Philadelphia, PA.
00005 c
00006 c       All rights reserved.
00007 c
00008 c       Redistribution and use in source and binary forms are permitted
00009 c       provided that the above copyright notice and this paragraph are
00010 c       duplicated in all such forms and that any documentation,
00011 c       advertising materials, and other materials related to such
00012 c       distribution and use acknowledge that the software was developed
00013 c       by the author named above.
00014 c
00015 c       THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
00016 c       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
00017 c       WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00018 c
00019 
00020         subroutine ngon(rcall,scall,h,n,thoff)
00021         save
00022 c
00023 c       Draws |n|-sided polygons  (n = 0 ==> "."
00024 c                                      1     "+"
00025 c                                      2     "x".
00026 c       or "stars" (for n < 0)
00027 c
00028         real*4 rr,ss,r,s,h,thoff
00029         integer*4 n
00030         common /findex/ index
00031         dimension rpoly(0:100),spoly(0:100),cth1(0:100),sth1(0:100)
00032 c
00033         data n1/0/
00034 c
00035         r=rcall
00036         s=scall
00037         go to 1
00038 c
00039         entry ungon(rcall,scall,h,n,thoff)
00040         entry userngon(rcall,scall,h,n,thoff)
00041         call fr inches(rcall,scall,r,s)
00042 c
00043 1       if(h.lt.0..and.n.ne.0)then
00044             hh=-h
00045             rr=r+.7071*hh
00046             ss=s+.7071*hh
00047         else
00048             hh=h
00049             rr=r
00050             ss=s
00051         end if
00052 c
00053         if(n.eq.0.or.h.eq.0.)then
00054             call point(rr,ss)
00055         else if(abs(n).eq.1)then
00056             call plot(rr-hh,ss,3)
00057             call plot(rr+hh,ss,2)
00058             call plot(rr,ss-hh,3)
00059             call plot(rr,ss+hh,2)
00060         else if(abs(n).eq.2)then
00061             hh=.7071*hh
00062             call plot(rr-hh,ss-hh,3)
00063             call plot(rr+hh,ss+hh,2)
00064             call plot(rr-hh,ss+hh,3)
00065             call plot(rr+hh,ss-hh,2)
00066         else
00067             nn=abs(n)
00068             nn1=nn
00069             if(n.lt.0)then
00070                 nn2=nn/2
00071                 ieven=0
00072                 if(2*nn2.eq.nn)ieven=1
00073                 if(ieven.eq.1)nn1=nn2
00074             end if
00075             th0=thoff
00076             dth=360./float(nn)
00077             th0=th0-90.-.5*dth
00078             th0=.017453*th0
00079             dth=.017453*dth
00080             th=th0-dth
00081             ipen=3
00082             do 100 i=0,nn1
00083                 if(nn.ne.n1)then
00084                     th=th+dth
00085                     cth1(i)=cos(th)
00086                     sth1(i)=sin(th)
00087                 end if
00088                 hc=hh*cth1(i)
00089                 hs=hh*sth1(i)
00090                 r1=rr+hc
00091                 s1=ss+hs
00092                 if(n.gt.0)then
00093                     if(index.lt.0)then
00094                         call plot(r1,s1,ipen)
00095                         ipen=2
00096                     else
00097                         rpoly(i)=r1
00098                         spoly(i)=s1
00099                     end if
00100                 else
00101                     if(ieven.eq.0)then
00102                         call plot(rr,ss,3)
00103                     else
00104                         call plot(rr-hc,ss-hs,3)
00105                     end if
00106                     call plot(r1,s1,2)
00107                 end if
00108 100         continue
00109             if(index.ge.0.and.n.gt.0)call polyfill(rpoly,spoly,n+1)
00110             n1=nn
00111         end if
00112 c
00113         end

Generated at Sun Feb 24 09:57:10 2002 for STARLAB by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001