Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

arrow.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 
00021       subroutine arrow(xtail,ytail,xhead,yhead,mode)
00022       save
00023 c
00024 c       Draw arrow from (x,y)-tail to (x,y)-head.
00025 c       If mode = 0, x and y are user units.
00026 c       If mode = 1, x and y are in inches.
00027 c
00028       common/scales/xl,xr,dinchx,ybot,ytop,dinchy,rlen,slen
00029       data open,pi/.5236,3.141593/head_size/-1.0/
00030 
00031       if(mode.eq.0)then
00032           rtail=(xtail-xl)*dinchx
00033           stail=(ytail-ybot)*dinchy
00034           dr=(xhead-xtail)*dinchx
00035           ds=(yhead-ytail)*dinchy
00036       else
00037           rtail=xtail
00038           stail=ytail
00039           dr=xhead-xtail
00040           ds=yhead-ytail
00041       end if
00042 
00043 c     Draw the shaft of the arrow.
00044 
00045       theta=atan2(ds,dr)
00046       call plot(rtail,stail,3)
00047 
00048       rhd=rtail+dr
00049       shd=stail+ds
00050       call plot(rhd,shd,2)
00051 
00052 c     Draw the point, scaled to shaft size if not otherwise specified.
00053 
00054       alpha=theta+pi-open
00055       shaft=sqrt(dr*dr+ds*ds)
00056 
00057       if (head_size.le.0.0) then
00058           if(shaft.gt.1.)then
00059               point=.15*shaft
00060           else if(shaft.lt..5)then
00061               point=max(.05,.2*shaft)
00062           else
00063               point = 2.*(shaft-.5)*.15*shaft
00064      &                + 2.*(1.-shaft)*max(.05,.2*shaft)
00065           end if
00066       else
00067           point = head_size
00068       end if
00069 
00070       r=rhd+point*cos(alpha)
00071       s=shd+point*sin(alpha)
00072       call plot(r,s,2)
00073       call plot(rhd,shd,3)
00074       alpha=alpha+2.*open
00075       r=rhd+point*cos(alpha)
00076       s=shd+point*sin(alpha)
00077       call plot(r,s,2)
00078 
00079       return
00080 
00081       entry set_arrow_head(size)
00082 
00083 c     Specify arrowhead size, in "inches".
00084 
00085       head_size = size
00086 
00087       end

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