5 &( x , y , xsom , ysom , nsom )
70 INTEGER,
INTENT(IN) :: NSOM
71 DOUBLE PRECISION,
INTENT(IN) :: X,Y
72 DOUBLE PRECISION,
INTENT(IN) :: XSOM(nsom),YSOM(nsom)
78 DOUBLE PRECISION A,B,ANGLE,XDEP,YDEP,XARR,YARR,DET,MU,LAMBDA,EPS
81 INTRINSIC cos,sin,abs,mod
92 IF(angle.GT.360.d0)
THEN 97 pi = 4.d0 * atan( 1.d0 )
98 a = cos( angle*pi/180.d0 )
99 b = sin( angle*pi/180.d0 )
120 IF(abs(xdep-xarr)+abs(ydep-yarr).LT.eps)
THEN 123 WRITE(
lu,*)
'INPOLY: SUPERIMPOSED POINTS IN THE POLYGON' 124 WRITE(
lu,*)
'AT POINT: ',xdep,
' AND ',ydep,
' WITH NUMBER ',n
126 WRITE(
lu,*)
'THE LAST POINT MUST NOT BE EQUAL TO THE FIRST' 127 WRITE(
lu,*)
'FOR EXAMPLE, GIVE 3 POINTS FOR A TRIANGLE' 129 WRITE(
lu,*)
'INPOLY IS PROBABLY CALLED BY FILPOL' 139 IF(abs(x-xdep).LE.eps.AND.abs(y-ydep).LE.eps)
THEN 146 det = a*(ydep-yarr)-b*(xdep-xarr)
147 IF(abs(det).LT.eps)
GO TO 1000
149 mu = ( (xdep-x)*(ydep-yarr)-(ydep-y)*(xdep-xarr) ) / det
150 lambda = ( a *(ydep-y )- b *(xdep-x ) ) / det
159 IF ((abs(x+a*mu-xdep).LE.eps.AND.abs(y+b*mu-ydep).LE.eps)
161 & (abs(x+a*mu-xarr).LE.eps.AND.abs(y+b*mu-yarr).LE.eps))
167 IF(mu.GE.-eps.AND.lambda.GE.-eps.AND.lambda.LE.1.d0+eps)
THEN 173 inpoly=(mod(nsect,2).EQ.1)
logical function inpoly(X, Y, XSOM, YSOM, NSOM)