subroutine intri(x,y,u,v,n,okay) # # Test whether any of the points (u(i),v(i)) are inside the triangle # whose vertices are specified by the vectors x and y. # Called by .Fortran() from triang.list.R. # implicit double precision(a-h,o-z) dimension x(3), y(3), u(n), v(n) integer okay logical inside zero = 0.d0 # Check on order (clockwise or anticlockwise). s = 1.d0 a = x(2) - x(1) b = y(2) - y(1) c = x(3) - x(1) d = y(3) - y(1) cp = a*d - b*c if(cp < 0) s = -s do i = 1,n { inside = .true. do j = 1,3 { jp = j+1 if(jp==4) jp = 1 # Take addition modulo 3. a = x(jp) - x(j) b = y(jp) - y(j) c = u(i) - x(j) d = v(i) - y(j) cp = s*(a*d - b*c) if(cp <= zero) { inside = .false. break } } if(inside) { okay = 0 return } } okay = 1 return end