revdep/library/silicate/deldir/ratfor/intri.r

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
mdsumner/gibble documentation built on May 25, 2020, 10:31 a.m.